一、重写基类扩展功能
package com.mk.mongodb.repository;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
import org.springframework.data.repository.NoRepositoryBean;
@NoRepositoryBean
public interface IBaseRepository<T, ID> extends MongoRepository<T, ID> {
String getTableName();
MongoOperations getMongoOperations();
MongoEntityInformation<T, ID> getEntityInformation();
Class<T> getEntityClass();
Class<ID> getIdClass();
}
package com.mk.mongodb.repository;
import org.springframework.data.mongodb.core.MongoOperations;
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;
public class BaseRepository<T, ID> extends SimpleMongoRepository<T, ID> implements IBaseRepository<T, ID> {
private final MongoOperations mongoOperations;
private final MongoEntityInformation<T, ID> entityInformation;
public BaseRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
super(metadata, mongoOperations);
this.mongoOperations = mongoOperations;
this.entityInformation = metadata;
}
@Override
public String getTableName(){
return entityInformation.getCollectionName();
}
@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();
}
}
二、Repository继承新基类
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> {
}
三、配置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:[email protected]:40001,192.168.1.3:40001/configDb