赞
踩
- 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);
-
- //查询对象id
- List<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;
- }
-
- @Override
- public T find(ID id) {
- return findById(id).orElse(null);
- }
-
- @Override
- public T findOne(Criteria criteria) {
-
- Query query = new Query(criteria);
- return this.mongoOperations.findOne(query, getEntityClass(), getTableName());
- }
-
- @Override
- public List<ID> findIdsByQuery(Query query) {
-
- return this.mongoOperations.findDistinct(query, this.getIdColumn(), getTableName(), getIdClass());
- }
-
- @Override
- public List<T> listAll() {
- return this.mongoOperations.findAll(getEntityClass(), getTableName());
- }
-
- @Override
- public 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;
- }
-
- @Override
- public 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;
- }
-
- @Override
- public 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;
- }
-
- @Override
- public 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;
- }
-
- @Override
- public 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;
- }
-
-
- @Override
- public String getTableName(){
- return entityInformation.getCollectionName();
- }
-
- @Override
- public ID getIdValue(T entity){
- return entityInformation.getId(entity);
- }
-
- @Override
- public String getIdAttribute(){
- return entityInformation.getIdAttribute();
- }
-
- @Override
- public String getIdColumn(){
- return "_id";
- }
-
-
- @Override
- public void deleteAll(Collection<ID> ids) {
- Criteria criteria = Criteria.where(this.getIdColumn()).in(ids);
- Query query = new Query(criteria);
- mongoOperations.remove(query, getTableName());
- }
-
-
- @Override
- public MongoOperations getMongoOperations() {
- return mongoOperations;
- }
-
- @Override
- public MongoEntityInformation<T, ID> getEntityInformation() {
- return entityInformation;
- }
-
- @Override
- public Class<T> getEntityClass() {
- return entityInformation.getJavaType();
- }
-
- @Override
- public Class<ID> getIdClass() {
- return entityInformation.getIdType();
- }
-
- @Override
- public BaseRepository<T, ID> _baseThis() {
- return this;
- }
-
- @Override
- public List<T> find(Query query) {
- return this.mongoOperations.find(query, getEntityClass(), getTableName());
- }
-
- @Override
- public long count(Query query) {
- return this.mongoOperations.count(query, getTableName());
- }
-
- @Override
- public <F> List<F> findDistinct(Query query, String field, Class<F> clazz) {
- return this.mongoOperations.findDistinct(query, field, getTableName(), clazz);
- }
-
- @Override
- public <F> AggregationResults<F> aggregate(Aggregation aggregation, Class<F> clazz) {
- return this.mongoOperations.aggregate(aggregation, getTableName(), clazz);
- }
-
- }

- package com.mk.mongodb.entity;
-
- import org.bson.types.ObjectId;
- import org.springframework.data.annotation.Id;
-
- public class Config {
- @Id
- private 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> {
-
- }
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。