SpringBoot 整合 MongoDB 实战开发
一、介绍
在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库、集合、文档!
数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库
集合(Collection): 集合指的是文档组(类似于 Mysql 中的表的概念),里面可以存储许多文档
文档(Document): 文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档、数组和文档数组
二、常用註解
2.1 Collection
@Id
@Document
@Field
@Transient
釋義:
@Id
主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。原因可参考上一篇mongo和mysql的性能对比。
在实际业务中不建议自己设置主键,应交给mongo自己生成,自己可以设置一个业务id,如int型字段,用自己设置的业务id来维护相关联的表
@Document
标注在实体类上,类似于hibernate的entity注解,标明由mongo来维护该表。
org.springframework.data.mongodb.core.mapping.Document.class
把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。
@Document(collection=“mongodb 对应 collection 名”)
// 若未加 @Document ,该 bean save 到 mongo 的 user collection
// 若添加 @Document ,则 save 到 thisUser collection
org.springframework.data.mongodb.core.mapping.Document.class
把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。
@Document(collection="mongodb 对应 collection 名")
// 若未加 @Document ,该 bean save 到 mongo 的 user collection
// 若添加 @Document ,则 save 到 thUser collection
@Document(collection="thUser ")
public class User{
}
@Field
代表一个字段,可以不加,不加的话默认以参数名为列名。
给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName
给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为userName,存储到 mongo 中 key 为 uName
@Field("uName")
private String userName;
@Transient
被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性
三 、SpringBoot 整合 MongoDB
3.1、创建 SpringBoot 工程,添加 MongoDB 依赖包
#配置数据库连接地址
spring.data.mongodb.uri=mongodb://test123:test123@127.0.0.1:27017/test_db
3.3、创建实体类
创建用于示例中测试的实体类Person。
其中注解@Document(collection=“persons”)用于指定当前文档属于集合persons。
注解@Id表示当前id字段属于主键类型。
/**
-
使用@Document注解指定集合名称
*/
@Document(collection=“persons”)
public class Person implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;/**
- 使用@Id注解指定MongoDB中的 _id 主键
*/
@Id
private Long id;
private String userName;
private String passWord;
private Integer age;
private Date createTime;
//…get/set
@Override
public String toString() {
return “Person{” +
“id=” + id +
“, userName='” + userName + ‘’’ +
“, passWord='” + passWord + ‘’’ +
“, age=” + age +
“, createTime=” + createTime +
‘}’;
}
}
3.4、操作 MongoDB
Springboot 操作 MongoDB 有两种方式。 - 使用@Id注解指定MongoDB中的 _id 主键
第一种方式是采用 Springboot 官方推荐的 JPA 方式,这种操作方式,使用简单但是灵活性比较差。
第二种方式是采用 Spring Data MongoDB 封装的 MongoDB 官方 Java 驱动 MongoTemplate 对 MongoDB 进行操作,这种方式非常灵活,能满足绝大部分需求。
本文将采用第二种方式进行介绍!
3.5、插入文档
MongoTemplate提供了insert()方法,用于插入文档,示例代码如下:
用于插入文档
没指定集合名称时,会取@Document注解中的集合名称
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 插入文档
* @throws Exception
*/
@Test
public void insert() throws Exception {
Person person =new Person();
person.setId(1l);
person.setUserName("张三");
person.setPassWord("123456");
person.setCreateTime(new Date());
mongoTemplate.insert(person);
}
}
自定义集合名称,插入文档
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 自定义集合,插入文档
* @throws Exception
*/
@Test
public void insertCustomCollection() throws Exception {
Person person =new Person();
person.setId(1l);
person.setUserName("张三");
person.setPassWord("123456");