基础配置
1、引用
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
2、配置
# 单机、用户名、密码spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test# 集群spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database# 认证数据库和基础数据库都要写spring:data:mongodb:uri: mongodb://dev:kaimen@10.10.20.9:27017authentication-database: base_datadatabase: base_data# 无密码spring.data.mongodb.uri=mongodb://localhost:27017/test
mongoTemplate
保存
@Autowiredprivate MongoTemplate mongoTemplate;mongoTemplate.save(user);
查询
@Overridepublic User findUserByUserName(String userName) {Query query=new Query(Criteria.where("userName").is(userName));User user = mongoTemplate.findOne(query , User.class);return user;}
条件更新
@Overridepublic long updateUser(User user) {Query query=new Query(Criteria.where("id").is(user.getId()));Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());//更新查询返回结果集的第一条UpdateResult result =mongoTemplate.updateFirst(query,update,User.class);//更新查询返回结果集的所有// mongoTemplate.updateMulti(query,update,UserEntity.class);if(result!=null)return result.getMatchedCount();elsereturn 0;}
删除
@Overridepublic void deleteUserById(Long id) {Query query=new Query(Criteria.where("id").is(id));mongoTemplate.remove(query,User.class);}
Repository
封装了一些简单操作,复杂操作还是需要使用template
public interface SecondaryRepository extends MongoRepository<User, String> {}
多数据源
配置
mongodb.primary.uri=mongodb://localhost:27017mongodb.primary.database=primarymongodb.secondary.uri=mongodb://localhost:27017mongodb.secondary.database=secondary
读取配置
@ConfigurationProperties(prefix = "mongodb")public class MultipleMongoProperties {private MongoProperties primary = new MongoProperties();private MongoProperties secondary = new MongoProperties();…………get set}@Configuration@EnableConfigurationProperties(MultipleMongoProperties.class)@EnableMongoRepositories(basePackages = "com.neo.repository.primary",mongoTemplateRef = "primaryMongoTemplate")public class PrimaryMongoConfig {}@Configuration@EnableConfigurationProperties(MultipleMongoProperties.class)@EnableMongoRepositories(basePackages = "com.neo.repository.secondary",mongoTemplateRef = "secondaryMongoTemplate")public class SecondaryMongoConfig {}
配置多个Template
@Configurationpublic class MultipleMongoConfig {@Autowiredprivate MultipleMongoProperties mongoProperties;@Primary@Bean(name = "primaryMongoTemplate")public MongoTemplate primaryMongoTemplate() throws Exception {return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));}@Bean@Qualifier("secondaryMongoTemplate")public MongoTemplate secondaryMongoTemplate() throws Exception {return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));}@Bean@Primarypublic MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {MongoClient client = new MongoClient(new MongoClientURI(mongoProperties.getPrimary().getUri()));return new SimpleMongoDbFactory(client, mongoProperties.getPrimary().getDatabase());}@Beanpublic MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {MongoClient client = new MongoClient(new MongoClientURI(mongoProperties.getSecondary().getUri()));return new SimpleMongoDbFactory(client, mongoProperties.getSecondary().getDatabase());}}
多个Repository
public interface PrimaryRepository extends MongoRepository<User, String> {}public interface SecondaryRepository extends MongoRepository<User, String> {}
