当前位置:   article > 正文

Spring Data之MongoDB配置_org.springframework.data.mongodb.repository.suppor

org.springframework.data.mongodb.repository.support

一、重写基类扩展功能

  1. package com.mk.mongodb.repository;
  2. import org.springframework.data.mongodb.core.MongoOperations;
  3. import org.springframework.data.mongodb.core.aggregation.Aggregation;
  4. import org.springframework.data.mongodb.core.aggregation.AggregationResults;
  5. import org.springframework.data.mongodb.core.convert.MongoConverter;
  6. import org.springframework.data.mongodb.core.query.Criteria;
  7. import org.springframework.data.mongodb.core.query.Query;
  8. import org.springframework.data.mongodb.repository.MongoRepository;
  9. import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
  10. import org.springframework.data.repository.NoRepositoryBean;
  11. import java.util.Collection;
  12. import java.util.List;
  13. @NoRepositoryBean
  14. public interface IBaseRepository<T, ID> extends MongoRepository<T, ID> {
  15. //根据id查询对象
  16. T find(ID id);
  17. T findOne(Criteria criteria);
  18. //查询对象id
  19. List<ID> findIdsByQuery(Query query);
  20. //根据字段名查询对象列表
  21. List<T> listAll();
  22. //根据id列表查询对象列表
  23. List<T> listByIds(Collection<ID> ids);
  24. //根据字段名查询对象列表
  25. List<T> listByField(String fieldName, Collection values);
  26. //根据字段名查询对象列表
  27. List<T> listByField(String fieldName, Object value);
  28. //根据字段名查询对象列表
  29. List<T> listByField(String fieldName1, Object value1, String fieldName2, Collection value2);
  30. //根据字段名查询对象列表
  31. List<T> listByField(String fieldName1, Object value1, String fieldName2, Object value2);
  32. //表名
  33. String getTableName();
  34. //id值
  35. ID getIdValue(T entity);
  36. //id属性名
  37. String getIdAttribute();
  38. //id列名
  39. String getIdColumn();
  40. //删除
  41. void deleteAll(Collection<ID> ids);
  42. //mongo操作对象
  43. MongoOperations getMongoOperations();
  44. //实体定义
  45. MongoEntityInformation<T, ID> getEntityInformation();
  46. //实体类
  47. Class<T> getEntityClass();
  48. //id类
  49. Class<ID> getIdClass();
  50. //mongo转换对象
  51. default MongoConverter getMongoConverter(){
  52. return getMongoOperations().getConverter();
  53. }
  54. //实例类base对象
  55. BaseRepository<T, ID> _baseThis();
  56. //查询数据
  57. List<T> find(Query query);
  58. //计算数量
  59. long count(Query query);
  60. //查询去重字段
  61. <F> List<F> findDistinct(Query query, String field, Class<F> clazz);
  62. //聚合
  63. <F> AggregationResults<F> aggregate(Aggregation aggregation, Class<F> clazz);
  64. }
  1. package com.mk.mongodb.repository;
  2. import org.springframework.data.mongodb.core.MongoOperations;
  3. import org.springframework.data.mongodb.core.aggregation.Aggregation;
  4. import org.springframework.data.mongodb.core.aggregation.AggregationResults;
  5. import org.springframework.data.mongodb.core.query.Criteria;
  6. import org.springframework.data.mongodb.core.query.Query;
  7. import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
  8. import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
  9. import java.util.Collection;
  10. import java.util.LinkedList;
  11. import java.util.List;
  12. public class BaseRepository<T, ID> extends SimpleMongoRepository<T, ID> implements IBaseRepository<T, ID> {
  13. protected final MongoOperations mongoOperations;
  14. protected final MongoEntityInformation<T, ID> entityInformation;
  15. public BaseRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
  16. super(metadata, mongoOperations);
  17. this.mongoOperations = mongoOperations;
  18. this.entityInformation = metadata;
  19. }
  20. @Override
  21. public T find(ID id) {
  22. return findById(id).orElse(null);
  23. }
  24. @Override
  25. public T findOne(Criteria criteria) {
  26. Query query = new Query(criteria);
  27. return this.mongoOperations.findOne(query, getEntityClass(), getTableName());
  28. }
  29. @Override
  30. public List<ID> findIdsByQuery(Query query) {
  31. return this.mongoOperations.findDistinct(query, this.getIdColumn(), getTableName(), getIdClass());
  32. }
  33. @Override
  34. public List<T> listAll() {
  35. return this.mongoOperations.findAll(getEntityClass(), getTableName());
  36. }
  37. @Override
  38. public List<T> listByIds(Collection<ID> ids) {
  39. Iterable<T> iterable = findAllById(ids);
  40. if(iterable instanceof List){
  41. return (List<T>) iterable;
  42. }
  43. List<T> list = new LinkedList<>();
  44. iterable.forEach(list::add);
  45. return list;
  46. }
  47. @Override
  48. public List<T> listByField(String fieldName, Collection values) {
  49. Criteria criteria = new Criteria();
  50. criteria.and(fieldName).in(values);
  51. Query query = new Query(criteria);
  52. List<T> list = this.find(query);
  53. return list;
  54. }
  55. @Override
  56. public List<T> listByField(String fieldName, Object value) {
  57. Criteria criteria = new Criteria();
  58. criteria.and(fieldName).is(value);
  59. Query query = new Query(criteria);
  60. List<T> list = this.find(query);
  61. return list;
  62. }
  63. @Override
  64. public List<T> listByField(String fieldName1, Object value1, String fieldName2, Collection value2) {
  65. Criteria criteria = new Criteria();
  66. criteria.and(fieldName1).is(value1).and(fieldName2).in(value2);
  67. Query query = new Query(criteria);
  68. List<T> list = this.find(query);
  69. return list;
  70. }
  71. @Override
  72. public List<T> listByField(String fieldName1, Object value1, String fieldName2, Object value2) {
  73. Criteria criteria = new Criteria();
  74. criteria.and(fieldName1).is(value1).and(fieldName2).is(value2);
  75. Query query = new Query(criteria);
  76. List<T> list = this.find(query);
  77. return list;
  78. }
  79. @Override
  80. public String getTableName(){
  81. return entityInformation.getCollectionName();
  82. }
  83. @Override
  84. public ID getIdValue(T entity){
  85. return entityInformation.getId(entity);
  86. }
  87. @Override
  88. public String getIdAttribute(){
  89. return entityInformation.getIdAttribute();
  90. }
  91. @Override
  92. public String getIdColumn(){
  93. return "_id";
  94. }
  95. @Override
  96. public void deleteAll(Collection<ID> ids) {
  97. Criteria criteria = Criteria.where(this.getIdColumn()).in(ids);
  98. Query query = new Query(criteria);
  99. mongoOperations.remove(query, getTableName());
  100. }
  101. @Override
  102. public MongoOperations getMongoOperations() {
  103. return mongoOperations;
  104. }
  105. @Override
  106. public MongoEntityInformation<T, ID> getEntityInformation() {
  107. return entityInformation;
  108. }
  109. @Override
  110. public Class<T> getEntityClass() {
  111. return entityInformation.getJavaType();
  112. }
  113. @Override
  114. public Class<ID> getIdClass() {
  115. return entityInformation.getIdType();
  116. }
  117. @Override
  118. public BaseRepository<T, ID> _baseThis() {
  119. return this;
  120. }
  121. @Override
  122. public List<T> find(Query query) {
  123. return this.mongoOperations.find(query, getEntityClass(), getTableName());
  124. }
  125. @Override
  126. public long count(Query query) {
  127. return this.mongoOperations.count(query, getTableName());
  128. }
  129. @Override
  130. public <F> List<F> findDistinct(Query query, String field, Class<F> clazz) {
  131. return this.mongoOperations.findDistinct(query, field, getTableName(), clazz);
  132. }
  133. @Override
  134. public <F> AggregationResults<F> aggregate(Aggregation aggregation, Class<F> clazz) {
  135. return this.mongoOperations.aggregate(aggregation, getTableName(), clazz);
  136. }
  137. }

 

二、Repository继承新基类

  1. package com.mk.mongodb.entity;
  2. import org.bson.types.ObjectId;
  3. import org.springframework.data.annotation.Id;
  4. public class Config {
  5. @Id
  6. private ObjectId id;
  7. private String value;
  8. public ObjectId getId() {
  9. return id;
  10. }
  11. public void setId(ObjectId id) {
  12. this.id = id;
  13. }
  14. public String getValue() {
  15. return value;
  16. }
  17. public void setValue(String value) {
  18. this.value = value;
  19. }
  20. }
  1. package com.mk.mongodb.repository;
  2. package com.mk.mongodb.entity.Config;
  3. import org.bson.types.ObjectId;
  4. @Repository
  5. public interface ConfigRepository extends IBaseRepository<Config, ObjectId> {
  6. }

 

三、配置MongoDB默认基类

  1. package com.mk;
  2. import com.mk.mongodb.repository.BaseRepository;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
  6. @SpringBootApplication
  7. @EnableMongoRepositories(repositoryBaseClass = BaseRepository.class)
  8. public class Application {
  9. public static void main(String[] args) {
  10. SpringApplication.run(Application.class, args);
  11. }
  12. }

数据库配置 

  1. spring:
  2. data:
  3. mongodb:
  4. uri: mongodb://username:password@192.168.1.2:40001,192.168.1.3:40001/configDb

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55999
推荐阅读
相关标签
  

闽ICP备14008679号