SpringBoot - 整合并操作MongoDB数据库教程1(使用MongoRepository)
借助于 Spring Data MongoDB,Spring Boot 为 MongoDB 也提供了开箱即用的自动化配置方案,下面通过样例进行演示。
一、安装配置
(1)首先编辑 pom.xml 文件,添加相关依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
(2)接着在 application.properties 中配置 MongoDB 的连接信息:
# 验证登录信息的库
spring.data.mongodb.authentication-database=admin
# 要连接的库
spring.data.mongodb.database=test
# 连接地址和认证信息
spring.data.mongodb.host=192.168.60.133
spring.data.mongodb.port=24017
spring.data.mongodb.username=root
spring.data.mongodb.password=123
二、使用 MongoRepository 操作数据库
1,创建实体类
首先我们创建 Book 实体类:@Setter @Getter @NoArgsConstructor public class Book { private Integer id; private String name; private String author; }
2,创建数据库访问层
接着创建 BookDao 接口,继承 MongoRepository,代码如下:
自定义的 BookDao 继承自 MongoRepository。MongoRepository 中提供了一些基本的数据操作方法,有基本的增删改查、分页查询、排序查询等,只要方法的定义符合既定规范,Spring Data MongoDB 就能分析出开发者的意图,避免开发者自定义查询语句 (类似于 Spring Data JPA 中的 JpaRepository)。方法命名规则可以参考我之前写的文章:
public interface BookDao extends MongoRepository<Book, Integer> { // 查询作者名包含某文字的所有书籍(使用既定规范命名的方法进行查询) List<Book> findByAuthorContains(String author); // 根据书名查询指定书籍(使用既定规范命名的方法进行查询) Book findByNameEquals(String nameMongoRepository); }
3,运行测试
(1)创建一个 Contoller,调用 BookDao 的 insert 方法将数据插入到数据库中。注意: insert 方法是 MongoRepository 接口原生就提供的。
@RestController public class HelloController { @Autowired BookDao bookDao; @RequestMapping("/save") public void save(){ List<Book> books = new ArrayList<Book>(); Book b1 = new Book(); b1.setId(2); b1.setName("克苏鲁神话"); b1.setAuthor("H.P.洛夫克拉夫特 "); books.add(b1); Book b2 = new Book(); b2.setId(3); b2.setName("筋膜拉伸"); b2.setAuthor("克里斯·弗雷德里克 "); books.add(b2); bookDao.insert(books); return; } }
(2)下面是使用 BookDao 的 findAll 方法进行分页查询。该方法返回值为 Page<Book>,该对象中包含有分页常用数据,例如总记录数、总页数、没页记录数、当前页记录数等。
注意: findAll 方法同样是 MongoRepository 接口原生就提供的。
@RestController public class HelloController { @Autowired BookDao bookDao; @RequestMapping("/findAll") public void findAll(){ PageRequest pageable = PageRequest.of(1,2); //第1个参数是页数,从0开始。第2个参数为每页条数 Page<Book> page = bookDao.findAll(pageable); System.out.println("总页数:" + page.getTotalPages()); System.out.println("总记录数:" + page.getTotalElements()); System.out.println("查询结果:" + page.getContent()); System.out.println("当前页数:" + (page.getNumber()+1)); System.out.println("当前记录数:" + page.getNumberOfElements()); System.out.println("每页记录数:" + page.getSize()); } }
(3)下面是调用 BookDao 中各个自定义的方法进行数据查询。
@RestController public class HelloController { @Autowired BookDao bookDao; @RequestMapping("/search") public void search(){ List<Book> books = bookDao.findByAuthorContains("克"); Book book = bookDao.findByNameEquals("时间的秩序"); System.out.println("作者名包含'克'字的书籍:" + books); System.out.println("书名为'时间的秩序'的书籍:" + book); } }
注:使用自动生成的主键 Id
(1)通常来说主键 id 不需要我们自己手动设置,如果想要自动生成,只需在主键字段上添加 @id 注解即可(参数类型为 String)注意:@Id 表示主键,不可重复,自带索引。如果自己不设置 @Id 主键,mongo 会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。
@Setter @Getter @NoArgsConstructor public class Book { @Id private String id; private String name; private String author; }
(2)由于主键类型变成了 String,在 BookDao 这边也要做同步修改:
public interface BookDao extends MongoRepository<Book, String> { }
(3)再次调用 BookDao 的 insert 方法将数据插入到数据库中。只不过这次我们不再手动设置 id :
@RestController public class HelloController { @Autowired BookDao bookDao; @RequestMapping("/save") public void save(){ List<Book> books = new ArrayList<Book>(); Book b1 = new Book(); b1.setName("克苏鲁神话"); b1.setAuthor("H.P.洛夫克拉夫特 "); books.add(b1); Book b2 = new Book(); b2.setName("筋膜拉伸"); b2.setAuthor("克里斯·弗雷德里克 "); books.add(b2); bookDao.insert(books); return; } }
(4)数据插入后,可以发现数据已经有自动生成的 id 了: