SpringBoot整合MongoDB
一. 创建SpringBoot项目导入依赖
<dependencies>
<!--mongo整合springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
二. application.yml配置
spring:
data:
mongodb:
uri: mongodb://192.168.153.124:27017/ems
三. 操作MongoDB数据库
TestMain01 测试
package com.xizi.springboot_mongodb.mogoClient;
@SpringBootTest(classes = SpringbootMongodbApplication.class)
@RunWith(SpringRunner.class)
public class TestMain01 {
@Autowired
private MongoTemplate temp;
// 根据主键id查询
@Test
public void test08(){
Person person = temp.findById("1111111111",Person.class);
List<Order> orders = person.getOrders();
for (Order order : orders) {
System.out.println(order);
}
}
// 测试有级联关系的两个对象
@Test
public void test06(){
Person p = new Person("1111111111","haha",23,1111);
List<Order> list =new ArrayList<Order>();
for(int i = 0 ; i < 3; i++){
ObjectId objectId = new ObjectId(new Date());
Order o = new Order(objectId, 111111+"_"+i, new Date());
temp.save(o);
list.add(o);
}
p.setOrders(list);
temp.save(p);
}
// 删除数据
@Test
public void test05(){
Person s = new Person();
s.setId(1+"");
temp.remove(s);
}
// 查询person表中的所有数据
@Test
public void test03(){
List<Person> list = temp.findAll(Person.class);
for (Person s : list) {
System.out.println(s);
}
}
// 添加数据
@Test
public void test02() {
/*for(int i = 0 ; i< 5;i++){
Student s = new Student(10+i+"", "zhangsan"+i, 12*i, 2000+i);
temp.save(s);
}*/
// 主键如果存在,进行更新
/*Student s = new Student("2", "zhangsasssssn", 111, 2000);
temp.save(s);*/
/**
* insert方法:如果key存在,报错
*/
Person s = new Person("2", "戏子", 111, 2000);
temp.insert(s);
}
}
TestMain02 测试
package com.xizi.springboot_mongodb.mogoClient;
public class TestMain02 {
@Autowired
private MongoTemplate temp;
@Test
public void testAddBatch(){
for(int i = 0 ; i<10;i++){
String id = UUID.randomUUID().toString().replace("-", "");
Person p = new Person(id, "zhangsan"+i, 10+i*2, 10000+i*2);
temp.save(p);
}
}
@Test // 排序
public void testOrder(){
Query query = new Query();
query.addCriteria(new Criteria().where("age").gt(10));
query.limit(10);
query.skip(2);
// 按照salary的升序排列
// query.with(new Sort(Direction.ASC,"salary"));
// 按照salary的降序排列
// query.with(new Sort(Direction.DESC, "salary"));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test
public void testLimitSkip(){
Query query = new Query();
query.addCriteria(new Criteria().where("age").gt(10));
query.limit(10);
query.skip(2);
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test // 查询与数组相关的信息
public void testQuery03(){
Query query = new Query();
Pattern pattern = Pattern.compile("^.*1.*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test // 查询与数组相关的信息
public void testQuery02(){
Query query = new Query();
// 查询 age数组长度为4的数据
// query.addCriteria(Criteria.where("age").size(4));
// 查询 age数组第三位 为 "aa"的记录
// query.addCriteria(Criteria.where("age.2").is("aa"));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test
public void testQuery01(){
Query query = new Query();
// 查询 age =18
//query.addCriteria(new Criteria().where("age").is(18));
//查询 age > 12 并且 age< 20
//query.addCriteria(new Criteria().andOperator(new Criteria("age").gt(12),new Criteria("age").lt(20)));
//查询 age =1 或者 age = 100
// query.addCriteria(new Criteria().orOperator(new Criteria("age").is(1),new Criteria("age").is(1000)));
// 查询 age in (1,2)
// query.addCriteria(new Criteria().where("age").in(1,2));
// 查询 age值 除以5 余数为2的数据
query.addCriteria(new Criteria("age").mod(5,2));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
public void bianli(List<Person> list){
for (Object o : list) {
System.out.println(o);
}
}
@Test
public void testUpdate04(){
Query query = new Query();
query.addCriteria(new Criteria().where("key1").is("hello 1"));
Update update = new Update();
update.set("key1", "value1");
update.pushAll("age",new Object[]{12,"aa",13});
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate03(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 用新元素替换旧元素
DBObject obj = new BasicDBObject("key1", "value1");
Update update = new BasicUpdate((Document) obj);
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate02(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 用新元素替换旧元素
DBObject obj = new BasicDBObject("key1", "value1");
Update update = new BasicUpdate((Document) obj);
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate01(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 在原始旧数据的基础上进行修改
Update update = new Update();
update.set("name","helloe zhangsan"); //根据key,对对应的值进行更新
update.inc("salary", 3); // 将该key对于的值进行递增
update.pull("optKey",new String[]{"optionValue1","optionValue2"});//只对数组有效。 将新数据压入到key对应的数组中
update.pop("optKey", Position.FIRST); // 只能对数组有用。将数组特定位置的元素移除
temp.updateFirst(query,update, Person.class);
}
}
还有三个实体类,差点忘了,一定要实现序列化
User
package com.xizi.springboot_mongodb.pojo;
@AllArgsConstructor
@Data
@NoArgsConstructor
@Accessors(chain = true)
@Document(collation = "t_user1")
public class User implements Serializable {
@Id
private String id;
private String name;
private Integer age;
@Transient //对象序列化时 当前这个属性不参加对象列化
private Date bir;
}
Order
package com.xizi.springboot_mongodb.pojo;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(collection="t_order")
public class Order {
@Id
@Indexed //创建索引
private ObjectId id;
@Field("order_num")
private String orderNum;
private Date createDate;
// 映射忽略的字段,该字段不会保存到mongodb。
@Transient
private String cc;
public Order(ObjectId id, String orderNum, Date createDate) {
this.id = id;
this.orderNum = orderNum;
this.createDate = createDate;
}
}
Person
package com.xizi.springboot_mongodb.pojo;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection="t_person")
public class Person {
@Id // 主键类型只能为:String,ObjectId,BigInteger
private String id;
private String name;
private int age;
private double salary;
@DBRef
private List<Order> orders = null;
public Person(String id, String name, int age, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
}
四. 测试
这里测试两三个,其他自己慢慢捣鼓
五. 源码GitHub传送门
https://github.com/Y960303802/Mongodb_Study