一、重写基类扩展功能

package com.mk.mongodb.repository;import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
import org.springframework.data.repository.NoRepositoryBean;
import java.util.Collection;
import java.util.List;@NoRepositoryBean
public interface IBaseRepository<T, ID> extends MongoRepository<T, ID> {//根据id查询对象T find(ID id);T findOne(Criteria criteria);//查询对象idList<ID> findIdsByQuery(Query query);//根据字段名查询对象列表List<T> listAll();//根据id列表查询对象列表List<T> listByIds(Collection<ID> ids);//根据字段名查询对象列表List<T> listByField(String fieldName, Collection values);//根据字段名查询对象列表List<T> listByField(String fieldName, Object value);//根据字段名查询对象列表List<T> listByField(String fieldName1, Object value1, String fieldName2, Collection value2);//根据字段名查询对象列表List<T> listByField(String fieldName1, Object value1, String fieldName2, Object value2);//表名String getTableName();//id值ID getIdValue(T entity);//id属性名String getIdAttribute();//id列名String getIdColumn();//删除void deleteAll(Collection<ID> ids);//mongo操作对象MongoOperations getMongoOperations();//实体定义MongoEntityInformation<T, ID> getEntityInformation();//实体类Class<T> getEntityClass();//id类Class<ID> getIdClass();//mongo转换对象default MongoConverter getMongoConverter(){return getMongoOperations().getConverter();}//实例类base对象BaseRepository<T, ID> _baseThis();//查询数据List<T> find(Query query);//计算数量long count(Query query);//查询去重字段<F> List<F> findDistinct(Query query, String field, Class<F> clazz);//聚合<F> AggregationResults<F> aggregate(Aggregation aggregation, Class<F> clazz);
}
package com.mk.mongodb.repository;import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class BaseRepository<T, ID> extends SimpleMongoRepository<T, ID> implements IBaseRepository<T, ID> {protected final MongoOperations mongoOperations;protected final MongoEntityInformation<T, ID> entityInformation;public BaseRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {super(metadata, mongoOperations);this.mongoOperations = mongoOperations;this.entityInformation = metadata;}@Overridepublic T find(ID id) {return findById(id).orElse(null);}@Overridepublic T findOne(Criteria criteria) {Query query = new Query(criteria);return this.mongoOperations.findOne(query, getEntityClass(), getTableName());}@Overridepublic List<ID> findIdsByQuery(Query query) {return this.mongoOperations.findDistinct(query, this.getIdColumn(), getTableName(), getIdClass());}@Overridepublic List<T> listAll() {return this.mongoOperations.findAll(getEntityClass(), getTableName());}@Overridepublic List<T> listByIds(Collection<ID> ids) {Iterable<T> iterable =  findAllById(ids);if(iterable instanceof List){return (List<T>) iterable;}List<T> list = new LinkedList<>();iterable.forEach(list::add);return list;}@Overridepublic List<T> listByField(String fieldName, Collection values) {Criteria criteria = new Criteria();criteria.and(fieldName).in(values);Query query = new Query(criteria);List<T> list = this.find(query);return list;}@Overridepublic List<T> listByField(String fieldName, Object value) {Criteria criteria = new Criteria();criteria.and(fieldName).is(value);Query query = new Query(criteria);List<T> list = this.find(query);return list;}@Overridepublic List<T> listByField(String fieldName1, Object value1, String fieldName2, Collection value2) {Criteria criteria = new Criteria();criteria.and(fieldName1).is(value1).and(fieldName2).in(value2);Query query = new Query(criteria);List<T> list = this.find(query);return list;}@Overridepublic List<T> listByField(String fieldName1, Object value1, String fieldName2, Object value2) {Criteria criteria = new Criteria();criteria.and(fieldName1).is(value1).and(fieldName2).is(value2);Query query = new Query(criteria);List<T> list = this.find(query);return list;}@Overridepublic String getTableName(){return entityInformation.getCollectionName();}@Overridepublic ID getIdValue(T entity){return entityInformation.getId(entity);}@Overridepublic String getIdAttribute(){return entityInformation.getIdAttribute();}@Overridepublic String getIdColumn(){return "_id";}@Overridepublic void deleteAll(Collection<ID> ids) {Criteria criteria = Criteria.where(this.getIdColumn()).in(ids);Query query = new Query(criteria);mongoOperations.remove(query, getTableName());}@Overridepublic MongoOperations getMongoOperations() {return mongoOperations;}@Overridepublic MongoEntityInformation<T, ID> getEntityInformation() {return entityInformation;}@Overridepublic Class<T> getEntityClass() {return entityInformation.getJavaType();}@Overridepublic Class<ID> getIdClass() {return entityInformation.getIdType();}@Overridepublic BaseRepository<T, ID> _baseThis() {return this;}@Overridepublic List<T> find(Query query) {return this.mongoOperations.find(query, getEntityClass(), getTableName());}@Overridepublic long count(Query query) {return this.mongoOperations.count(query, getTableName());}@Overridepublic <F> List<F> findDistinct(Query query, String field, Class<F> clazz) {return this.mongoOperations.findDistinct(query, field, getTableName(), clazz);}@Overridepublic <F> AggregationResults<F> aggregate(Aggregation aggregation, Class<F> clazz) {return  this.mongoOperations.aggregate(aggregation, getTableName(), clazz);}}

二、Repository继承新基类

package com.mk.mongodb.entity;import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;public class Config {@Idprivate ObjectId id;private String value;public ObjectId getId() {return id;}public void setId(ObjectId id) {this.id = id;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}
package com.mk.mongodb.repository;package com.mk.mongodb.entity.Config;
import org.bson.types.ObjectId;@Repository
public interface ConfigRepository extends IBaseRepository<Config, ObjectId> {}

三、配置MongoDB默认基类

package com.mk;import com.mk.mongodb.repository.BaseRepository;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;@SpringBootApplication
@EnableMongoRepositories(repositoryBaseClass = BaseRepository.class)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

数据库配置

spring:data:mongodb:uri: mongodb://username:password@192.168.1.2:40001,192.168.1.3:40001/configDb

Spring Data之MongoDB配置相关推荐

  1. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  2. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  3. 使用Spring Data访问MongoDB数据库

    本文将引导我们如何使用Spring Data MongoDB构建应用程序,并使用应用程序在MongoDB(基于文档的数据库)中存储数据与检索数据. 需要新建什么 我们要使用Spring Data Mo ...

  4. dbref java_java – Spring Data REST MongoDB:检索DBRef的对...

    你好专家@ stackOverflow, 我们正在使用Spring Data REST MongoDB. 是否有可能急于加载子对象,而不是使用@DBRef注释的超链接?请参阅下面的Process.te ...

  5. springmvc jpa_使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置

    springmvc jpa 在本文中,我们将看到如何使用JavaConfig配置和集成SpringMVC4,带有Hibernate的Spring Data JPA和SpringSecurity. 1. ...

  6. 使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置

    在本文中,我们将看到如何使用JavaConfig配置和集成SpringMVC4,带有Hibernate的Spring Data JPA和SpringSecurity. 1.首先让我们在pom.xml中 ...

  7. Spring Data,MongoDB和JSF集成教程

    示例应用程序简介(MongoShop产品目录) 在学习完本教程之后,将构建具有以下功能要求的示例应用程序(MongoShop产品目录): 1.搜索具有不同条件的产品(例如,sku,产品类型,标题,st ...

  8. MongoDB学习笔记(三)使用Spring Data操作MongoDB

    1.所需的包: 2.代码: (1)配置文件一:bootstrap.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. spring data jpa常用配置

    spring.jpa.hibernate.ddl-auto 首次程序运行时对ddl的操作 create: 每次运行该程序,没有表格会新建表格,表内有数据会清空: create-drop: 每次程序结束 ...

最新文章

  1. [导入]如何用WAP手机远程遥控电脑
  2. Apache Flink 零基础入门(十一)Flink transformation
  3. 兼容 .NET Core3.0, Natasha 框架实现 隔离域与热编译操作
  4. 根据图片地址得到文件流
  5. Java性能优化方面的程序优化知识点归纳,希望对你有所帮助
  6. 应用程序架构指导袖珍版
  7. spring-boot使用教程之三:如何使用sts中的热部署来降低代码开发量
  8. 使用JSON Viewer直观查看JSON数据
  9. springboot对于redis的增删改查
  10. android uri parcel,Android ParcelFileDescriptor实现进程间通信
  11. CentOS 安装Docker 并部署配置MySql
  12. 广袤之中:沿着克拉克三大定律,读懂华为的最深期待
  13. 手机html页面图片不显示,是什么原因?HTML插入图片显示不出来?
  14. 深入浅出DockerPDF
  15. iPhone显示返回的是html界面,iPhone X怎么回到主界面?苹果X返回主页的两种方法...
  16. Redis6:第六章:(2)Redis6 新数据类型:HyperLogLog
  17. input tabIndex说明
  18. 好东西大家分享: 怎么画数据流图 1
  19. 移动开发:Android数据连接浅析
  20. mysql 启动出现系统错误193

热门文章

  1. mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  2. C++11的for循环使用auto的新用法
  3. python程序启动其他python程序,如何使用Python启动应用程序的实例?
  4. 《C++ Primer》7.4节练习
  5. C++map容器应用举例
  6. python文本替换 数据库_在Python中使用ASCII文件中的注释查找/替换子...
  7. delphi中的函数传参如何传枚举参数_Python基础笔记Day05函数
  8. TCP协议——流量控制和拥塞控制
  9. 帕斯卡三角形杨辉三角
  10. C - Rencontre Gym - 102798C