SpringBoot 整合 Mongodb 与 MongoTemplate、MongoRepository 用法教程

概念说明

spring-data-mongodb 提供 MongoTemplateMongoRepository两种操作方式MongoRepository 操作简单 缺点是不够灵活MongoTemplate 操作灵活,在项目中可以灵活使用这两种方式

与SpringBoot集成

SpringBoot 提供了 mongodb 的 starter 包 直接引入即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

yml配置连接

spring:
  data:
    mongodb:
      port: 27017
      host: localhost
      # 注意: 每个库对应的用户不同 root用户默认对应admin库
      database: admin
      # 如果设置了用户名密码 需要填
      username: root
      # 如果设置了用户名密码 需要填
      password: 123456

MongoTemplate 用法

通用实体类

@Data
@Document("user")
public class User {
 @Id
  private String id;
  private String name;
  private Integer age;
  private String email;
  // 没什么特殊含义可以自定义 为了演示
  private List<Tag> tags;
}

@Data
public class Tag {

 private String tagId;
 private boolean enable;
}
@SpringBootTest
public class MongoTemplateTest {

    @Autowired
    private MongoTemplate mongoTemplate;

 // 添加操作
    @Test
    public void create() {
        User user = new User();
        user.setAge(26);
        user.setName("lionli");
        user.setEmail("XXXXXXX@qq.com");
        User insert = mongoTemplate.insert(user);
        System.out.println(insert);
    }
    
    // 查询所有
  @Test
  public void findAll(){
      List<User> userList = mongoTemplate.findAll(User.class);
      System.out.println(userList);
  }

  // 根据id查询
  @Test
 public void findId(){
      User user = mongoTemplate.findById("6422a4ac7716000081001068", User.class);
      System.out.println(user);
  }
 
  // 条件查询
  @Test
  public void findUserList(){
      Query query = new Query(Criteria.where("name").is("lionli").and("age").is(26));
      List<User> userList = mongoTemplate.find(query, User.class);
      System.out.println(userList);
  }
 
  // 模糊查询
    @Test
    public void findLikeUserList(){
        String regex = String.format("%s%s","^.*""lion");
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("name").regex(pattern));
        List<User> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }
    
    // 分页查询
    @Test
    public void findPageUserList(){
        int pageNum = 1;
        int pageSize = 10;
        //条件构建
        String regex = String.format("%s%s","^.*""lion");
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("name").regex(pattern));
        //分页构建
        //查询记录数
        long count = mongoTemplate.count(query, User.class);
        //分页
        List<User> userList = mongoTemplate.find(query.skip((pageNum - 1) * pageSize).limit(pageSize), User.class);
        System.out.println(count);
        System.out.println(userList);
    }

  // 修改
    @Test
    public void updateUser(){
        //根据id查询数据
        User user = mongoTemplate.findById("6422a4ac7716000081001068", User.class);
        //设置修改的值
        user.setName("crazylionli");
        user.setAge(20);
        //调用方法实现修改操作
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = new Update();
        update.set("name",user.getName());
        update.set("age",user.getAge());
        UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
        long count = upsert.getModifiedCount();
        System.out.println(count);
    }
    
    // 删除操作
    @Test
    public void deleteUser(){
        Query query = new Query(Criteria.where("_id").is("6422a4ac7716000081001068"));
        DeleteResult remove = mongoTemplate.remove(query, User.class);
        long deletedCount = remove.getDeletedCount();
        System.out.println(deletedCount);
    }
    
    // 嵌套表添加
  @Test
  public void addTag() {
   Tag tag = new Tag();
   tag.setTagId("1");
   tag.setEnable(true);
   Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068"));
   Update update = new Update();
   update.addToSet("tags", tag);
   mongoTemplate.upsert(query, update, User.class);
  }

  // 更新嵌套表
  @Test
  public void updateTag() {
        Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068")
                .and("tags.tagId").is("1"));
        Update update = new Update();
        update.set("tags.$.enable"false);
        mongoTemplate.updateFirst(query, update, User.class);
  }
 
  // 删除嵌套表
  @Test
  public void removeTag() {
        Query query = Query.query(Criteria.where("_id").is("6422a4ac7716000081001068")
                .and("tags.tagId").is("1"));
        Update update = new Update();
        update.unset("tags.$");
        mongoTemplate.updateFirst(query, update, User.class);
  }
}

MongoRepository 用法

@Repository
public interface UserRepository extends MongoRepository<UserString{

}
@SpringBootTest
public class MongoTemplateTest {

    @Autowired
    private UserRepository userRepository;

  // 添加操作
    @Test
    public void create() {
        User user = new User();
        user.setAge(26);
        user.setName("lionli");
        user.setEmail("XXXXXXX@qq.com");
        User insert = userRepository.save(user);
        System.out.println(insert);
    }
    
    // 查询所有
  @Test
  public void findAll(){
      List<User> userList = userRepository.findAll();
      System.out.println(userList);
  }

  // 根据id查询
  @Test
  public void findId(){
      User user = userRepository.findById("6422a4ac7716000081001068").get();
      System.out.println(user);
  }
 
  // 条件查询
  @Test
  public void findUserList(){
      User user = new User();
        user.setName("lionli");
        user.setAge(26);
      Example<User> userExample = Example.of(user);
        List<User> userList = userRepository.findAll(userExample);
      System.out.println(userList);
  }
 
  // 模糊查询
    @Test
    public void findLikeUserList(){
        // 设置模糊查询匹配规则
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                // 忽略大小写
                .withIgnoreCase(true);
        User user = new User();
        user.setName("lion");
        Example<User> userExample = Example.of(user, matcher);
        List<User> userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }
    
    // 分页查询
    @Test
    public void findPageUserList(){
     // 0代表第一页
        Pageable pageable = PageRequest.of(010);
        User user = new User();
        user.setName("lionli");
        Example<User> userExample = Example.of(user);
        Page<User> page = userRepository.findAll(userExample, pageable);
        System.out.println(page);
    }

  // 修改
    @Test
    public void updateUser(){
        User user = userRepository.findById("6422a4ac7716000081001068").get();
        user.setName("crazylionli");
        user.setAge(20);
        User save = userRepository.save(user); //有id则修改,无id则变成添加操作
        System.out.println(save);
    }
    
    // 删除操作
    @Test
    public void deleteUser(){
        userRepository.deleteById("6422a4ac7716000081001068");
    }

}


原文始发于微信公众号(狮子领域 程序圈):SpringBoot 整合 Mongodb 与 MongoTemplate、MongoRepository 用法教程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/214951.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!