Springboot整合mongodb


前言

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。


一、springboot如何整合mongodb?

1、 配置pom文件

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

2、配置文件添加配置

spring.data.mongodb.uri=mongodb://userName:password@127.0.0.1:27017/dbName

这里根据自己数据库情况添加

3、创建实体类

实体类上添加*@Document(“集合/表名”)* ,id属性由于Mongodb会生成24位的字符串需要设置为String类型且需要添加注解*@Id*

二、具体使用

方式一、MongoTemplate

MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面
MongoTemplate的两大核心类:

  • Criteria类:封装所有的语句,以方法的形式查询。
  • Query类:将语句进行封装或者添加排序之类的操作。

MongoTemplate提供了很多操作MongoDB的方法。 它是线程安全的,可以在多线程的情况下使用。

//注入MongoTemplate
@Autowired
private MongoTemplate mongoTemplate;
//添加
@Test
void create() {
   User user=new User();
   user.setName("xiaodeng");
   user.setAge(21);
   user.setEmail("123@123.com");
   User u = mongoTemplate.insert(user);
   System.out.println(u);
}
 
//查询所有
@Test
void find(){
  List<User> users = mongoTemplate.findAll(User.class);
  for (User user : users) {
     System.out.println(user);
  }
}
 
//通过id查询
@Test
void findById(){
  User user = mongoTemplate.findById("627120bf48f3efd7bcb4348b", User.class);
  System.out.println(user);
}
 
//条件组合查询
@Test
void findByCondition(){
  /**
   * name = xiaodeng and age = 21 组合查询
   */
  Query query=new Query(
     Criteria.where("name").is("xiaodeng").and("age").is(21)
  );
  List<User> users = mongoTemplate.find(query, User.class);
  for (User user : users) {
    System.out.println(user);
  }
}
 
//模糊查询
@Test
void findLikeUser(){
  /**
   * name like deng
   */
  String name="deng";
  //正则规则
  String regex=String.format("%s%s%s","^.*",name,".*$");
  //正则表达式
  Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
  //创建条件构造器
  Query query=new Query(
     Criteria.where("name").regex(pattern)
  );
  List<User> users = mongoTemplate.find(query, User.class);
  for (User user : users) {
    System.out.println(user);
  }
}
 
//分页查询
@Test
void findByPage(){
  Integer pageNum=1;
  Integer pageSize=2;
  Query query=new Query();
  //查询记录数 query必须填写可以不构建条件,但不能类似mp直接写null
  long count = mongoTemplate.count(query, User.class);
  //分页  skip为跳过这几条数据意味着开始位置,limit为每页的数据量
  List<User> users = mongoTemplate.find(query.skip((pageNum - 1) * 
                           pageSize).limit(pageSize), User.class);
  for (User user : users) {
    System.out.println(user);
  }
  System.out.println(count);
}
 
//修改
@Test
void update(){
  Query query=new Query(
     Criteria.where("_id").is("6271223648f3efd7bcb4348c")
  );
  Update update=new Update();
  update.set("name","xiaozuo");
  update.set("age",22);
  update.set("email","123@123.com");
  UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
  long matchedCount = upsert.getMatchedCount();//影响行数
  System.out.println(upsert);
}
 
//删除
@Test
void delete(){
  Query query=new Query(
     Criteria.where("_id").is("6271223648f3efd7bcb4348c")
  );
  DeleteResult remove = mongoTemplate.remove(query, User.class);
  long deletedCount = remove.getDeletedCount();//影响行数
  System.out.println(deletedCount);//1 成功 0 失败
}

方式二、MongoRepository

1.创建数据访问层

第一个参数为实体类型,第二个为主键Id类型

public interface UserRepository extends MongoRepository<Person, String> {
}

2.在业务层或测试类中注入UserRepository

//多条件查询
@Test
void findByCondition(){
   /**
    * 关于Example 示例查询
    * 1、由Probe和ExampleMatcher构成,他可以动态构建查询体,不需要开发者便携包含字段名的查询
    * 2、Probe可以理解为查询构建的实例对象,ExampleMatcher匹配器
    * 3、限制:不支持嵌套或者分组、不支持字符串的开始、包含、结束和正则表达式匹配
    * 4、默认情况下实例对象的属性值为null时会被忽略,如果不是就会取值作为sql匹配条件,字符串 
          类型的数据将会被特定的默认值匹配。
    *    注意:如果一个字段不是包装类型,而是基础类型,他也会参与到where条件中去,值为默认值。
    * 5、of()为工厂方法,用来构建示例
    * 6、除字符串类型属性外,其他属性只支持精准查询,且字符串类型默认也为精准查询
    * 7、匹配器可以用来对匹配方式自定义操作,类似改变字符串为模糊查询、执行后缀字符串查询。
    *    注意:默认情况匹配器期望实例对象上的所有属性都匹配,但也可以在内部为单个属性设置特 
         有的处理方式
    *
    */
    User u=new User();
    u.setName("xiaolu");
    u.setAge(21);
    Example<User> userExample =Example.of(u);
    System.out.println(userExample);
    List<User> users = userRepository.findAll(userExample);
    System.out.println(users);
}
//模糊查询
@Test
void findLikeUser(){
   ExampleMatcher exampleMatcher=ExampleMatcher.matching()
       .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)//设置字符串模糊查询规则
       .withIgnoreCase(true);//设置忽略大小写
   User u=new User();
   u.setName("lu");
   u.setEmail("123");
   Example<User> userExample = Example.of(u, exampleMatcher);
   List<User> users = userRepository.findAll(userExample);
   System.out.println(users);
}
//分页查询
@Test
void findByPage(){
  /**
   *  设置分页查询 可设置当前页数、每页条数,也可设置指定的Sort排序规则等
   *  注意:该当前页从0开始
   */
  Pageable pageable = PageRequest.of(1, 3);
  User u=new User();
  Example<User> userExample = Example.of(u);
  Page<User> userPage = userRepository.findAll(userExample, pageable);
  System.out.println(userPage);
  System.out.println(userPage.getContent());
  System.out.println(userPage.getTotalPages());
}

三、 总结

总而言之,springboot整合mongodb可以使用两种方法,两者差别不是很大,可以根据自己的习惯选择合适的方法。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot整合MongoDB非常简单。下面是一个简单的示例来说明如何在Spring Boot项目中使用MongoDB。 首先,您需要将MongoDB的依赖项添加到您的项目中。在您的pom.xml文件中,添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 接下来,您需要在application.properties或application.yml文件中配置MongoDB的连接信息。例如,如果您的MongoDB服务器在本地运行,并使用默认端口27017,则可以使用以下配置: ```properties spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydb ``` 然后,您可以创建一个实体类来映射MongoDB中的文档。例如,假设您有一个名为Book的实体类: ```java import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "books") public class Book { @Id private String id; private String name; private String type; private String description; // 省略构造方法、Getter和Setter } ``` 接下来,您可以创建一个Repository接口来定义对MongoDB的操作。例如,假设您想要实现一些基本的CRUD操作: ```java import org.springframework.data.mongodb.repository.MongoRepository; public interface BookRepository extends MongoRepository<Book, String> { // 省略其他自定义查询方法 } ``` 现在,您可以在您的服务类或控制器中使用BookRepository来操作MongoDB。例如,您可以注入BookRepository,并调用相应的方法来添加、删除、更新和查询Book对象。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BookService { @Autowired private BookRepository bookRepository; public void addBook(Book book) { bookRepository.save(book); } public void deleteBook(String id) { bookRepository.deleteById(id); } public void updateBook(Book book) { bookRepository.save(book); } public Book getBookById(String id) { return bookRepository.findById(id).orElse(null); } public List<Book> getAllBooks() { return bookRepository.findAll(); } } ``` 这样,您就可以通过调用BookService中的方法来进行相应的操作。 总结一下,整合Spring BootMongoDB需要添加依赖项,配置连接信息,创建实体类和Repository接口,并在服务类或控制器中使用Repository来操作MongoDB

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gunalaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值