文章目录
springboot上使用MongoTemplate和MongoRepository这两种方式来操作mongodb
之前写的一个示例:github地址
一.Spring boot 使用MongoTemplate
1.配置mongodb连接
spring:
data:
mongodb:
uri: mongodb://账号:密码@IP:27017/test
在Service或者Controller下注入MongoTemplate
@Autowired
MongoTemplate mongoTemplate;
2.插入数据
①第一种方式,使用mongoTemplate.insert,这种方式就相当于mysql的insert语句,会发生主键冲突
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("Ryan");
user.setAge(25);
mongoTemplate.insert(user);
②第二种方式,使用mongoTemplate.save,这个方式相当于mysql的replace语句,遇到存在的主键会更新数据
User user2 = new User();
user2.setId(UUID.randomUUID().toString());
user2.setName("Ryan2");
user2.setAge(25);
mongoTemplate.save(user2);
执行插入语句后,查询数据,验证结果
3.查询数据
上面插入了两条数据,现在执行查询语句
①使用mongoTemplate.findOne,查询返回第一条name为Ryan的数据
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Ryan2"));
User user = mongoTemplate.findOne(query, User.class);
logger.info(gson.toJson(user));
执行查询,在控制台查看打印的查询结果
②使用mongoTemplate.find和Pattern进行模糊查询,查询name包含ryan的数据
Query query = new Query();
Pattern pattern= Pattern.compile("^.*"+ "ryan" +".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
List<User> list = mongoTemplate.find(query, User.class);
logger.info(gson.toJson(list));
执行查询,在控制台查看打印的查询结果
③使用orOperator进行多条件查询,orOperator相当于mysql的or
Query query = new Query();
query.addCriteria(new Criteria().orOperator(Criteria.where("name").is("Ryan"), Criteria.where("name").is("Ryan2")));
List<User> list = mongoTemplate.find(query, User.class);
logger.info(gson.toJson(list));
执行查询,在控制台查看打印的查询结果
4.更新数据
①使用mongoTemplate.updateFirst更新name为Ryan的数据,把age字段更新为100
Update update = new Update();
update.set("age", "100");
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Ryan"));
UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
logger.info(gson.toJson(result));
查询数据库,验证结果
②使用mongoTemplate.updateMulti进行批量更新
Update update = new Update();
update.set("age", "30");
Query query = new Query();
Pattern pattern= Pattern.compile("^.*"+ "ryan" +".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
UpdateResult result = mongoTemplate.updateMulti(query, update, User.class);
logger.info(gson.toJson(result));
查询数据库,验证结果
5.删除数据
使用mongoTemplate.remove删除name为Ryan2的数据
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Ryan2"));
DeleteResult result = mongoTemplate.remove(query, User.class);
logger.info(gson.toJson(result));
查询数据库,验证结果
二.Spring boot 使用MongoRepository
MongoRepository和Jpa的JpaRepository的使用方法是一样的
创建一个UserRepository,继承MongoRepository
/**
* @author ryan
*/
public interface UserRepository extends MongoRepository<User, String> {
}
在Service或者Controller下注入UserRepository
@Autowired
UserRepository userRepository;
1.插入数据
继承MongoRepository,可以使用MongoRepository的insert和save两种方法
// 单个插入
User ryan = new User();
ryan.setId(UUID.randomUUID().toString());
ryan.setName("ryan");
ryan.setAge(20);
userRepository.insert(ryan);
User master = new User();
master.setId(UUID.randomUUID().toString());
master.setName("atwood");
master.setAge(100);
userRepository.save(master);
// 批量插入
List<User> ryans = new ArrayList<>();
for (int i = 0; i <= 5; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("ryan" + i);
user.setAge(i);
ryans.add(user);
}
userRepository.insert(ryans);
List<User> atwoods = new ArrayList<>();
for (int i = 0; i <= 5; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("atwood" + i);
user.setAge(i);
atwoods.add(user);
}
userRepository.saveAll(atwoods);
查询数据库验证结果
2.查询
使用MongoRepository的方式和JpaRepository一样
①当你输入find的时候,会自动弹出提示
这一步如果你会使用Jpa,那就会非常容易上手
我们根据弹出的提示写根据name查询,写上参数name就可以使用了
User findByName(String name);
// 根据name查询
User ryan = userRepository.findByName("ryan");
logger.info(gson.toJson(ryan));
执行查询,在控制台输出查询结果
②自定义查询
使用@Query注解,value对应的字段代表参数,fileds可以指定字段的显示和不显示
根据id查询name字段的值,其他字段都不显示
@Query(value = "{'_id': ?0}", fields = "{'name': 1, '_id': 0}")
String getNameById(String id);
执行查询,在控制台输出查询结果
3.删除
使用MongoRepository的delete deleteById deleAll方法
// 删除
User user = new User();
user.setId("21ed8cc8-dc9c-4d84-8794-f65d85152fb7");
user.setName("atwood");
user.setAge(100);
userRepository.delete(user);
//根据id删除
userRepository.deleteById("30917aa3-f9c9-4fa6-b6df-2470966513d3");
执行删除,到数据库验证结果,可以发现两条数据被删除掉了
清空表
userRepository.deleteAll();