SpringBoot整合mongodb

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();

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值