说是使用springboot,其实是使用springboot下的springdata
目录
1,新建项目,注意要选择Spring Initializr,类型maven,jdk1.8对应java8
2.下一步,勾选springweb,如果是jdk1.8,最好选择springboot2.7之前的版本
3.打开pom.xml,注入依赖,根据选择可以修改spring-boot-starter-parent的版本号,我的jdk为1.8,我这里选择,2.6.2版本
4.配置properties,连接MongoDB,具体的教程网上一大堆,这里就不在解释了
5.新建个实体类User,用于对应MongoDB的数据库对象
6.新建测试类,继承项目自动构建的测试类(该类一般都有@SpringBootTest注解),新建测试类注入MongoTemplate来测试数据库的增删查改
6.4.15 使用json字符串方式查询,也就是类似命令行的输入格式
1,新建项目,注意要选择Spring Initializr,类型maven,jdk1.8对应java8
2.下一步,勾选springweb,如果是jdk1.8,最好选择springboot2.7之前的版本
项目结构
3.打开pom.xml,注入依赖,根据选择可以修改spring-boot-starter-parent的版本号,我的jdk为1.8,我这里选择,2.6.2版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>SpringInitializr-Springdata-mongodb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringInitializr-Springdata-mongodb</name>
<description>SpringInitializr-Springdata-mongodb</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mongodb 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
之后点击idea右侧的maven,点击刷新,加载我们配置的的依赖
4.配置properties,连接MongoDB,具体的教程网上一大堆,这里就不在解释了
spring.data.mongodb.uri=mongodb://localhost:27017/mydb
或application.yml
spring:
data:
mongodb:
uri: mongodb://localhost:27017/mongoTest
5.新建个实体类User,用于对应MongoDB的数据库对象
package com.example.springinitializrspringdatamongodb.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document("user")
public class User {
@Id
private Integer id;
@Field
private String name;
@Field
private String password;
public User() {
}
public User(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
@Document("user")用于指定MongoDB的数据库集合名称,@id表示数据库的主键_id,@Field指定对应的数据字段
6.新建测试类,继承项目自动构建的测试类(该类一般都有@SpringBootTest注解),新建测试类注入MongoTemplate来测试数据库的增删查改
public class MongoTemplateTests extends SpringInitializrSpringdataMongodbApplicationTests {
//注入MongoTemplate,需要实现构造方法
private final MongoTemplate mongoTemplate;
@Autowired
public MongoTemplateTests(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
}
6.1 创建集合
//1.创建集合
@Test
public void testCreateCollection() {
boolean exsits = mongoTemplate.collectionExists("users");
if (exsits) {
System.out.println("该集合已存在!");
} else {
mongoTemplate.createCollection("users");
}
}
6.2 删除集合
//2.删除集合
@Test
public void testDropCollection() {
mongoTemplate.dropCollection("users");
}
6.3 集合的数据操作:添加
//文档操作:添加
@Test
public void testAddUser() {
User user = new User(1, "user1", "123");
mongoTemplate.save(user);//save方法,当_id存在时更新数据
// mongoTemplate.insert(user);//insert方法,当当_id存在时冲突,但是适合插入批量数据
//批量插入用insert
List<User> users = Arrays.asList(new User(2, "user2", "123"), new User(3, "user3", "123")); //该方法是将数组转化成List集合的方法
mongoTemplate.insert(users, User.class); //参数2指定放入哪个集合User.class
//mongoTemplate.insert(users, "user");//或者这样指定
}
6.4 集合的数据操作:查询
6.4.1 查询所有
@Test
public void testFind() {
//1.查询所有
List<User> users = mongoTemplate.findAll(User.class);
users.forEach(System.out::println);
}
6.4.2 基于id查询一个
mongoTemplate.findById(1, User.class);
6.4.3 添加查询 参数1:查询条件 参数2:返回类型
mongoTemplate.find(new Query(), User.class);
6.4.4 等值查询
mongoTemplate.find(Query.query(Criteria.where("username").is("user1")), User.class);
6.4.5 > < >= <=
List<User> users2 = mongoTemplate.find(Query.query(Criteria.where("age").gte(20)), User.class);
users.forEach(System.out::println);
6.4.6 and查询
mongoTemplate.find(Query.query((Criteria.where("name").is("user1").and("age").is(30))), User.class);
6.4.7 or查询
Criteria criteria = new Criteria();
criteria.orOperator(
Criteria.where("name").is("user1"),
Criteria.where("name").is("user1")
);
List<User> users3 = mongoTemplate.find(Query.query(criteria), User.class);
users3.forEach(System.out::println);
6.4.8 模糊查询
Criteria criteria1 = Criteria.where("name").regex("er1");
List<User> users1 = mongoTemplate.find(Query.query(criteria1), User.class);
users1.forEach(System.out::println);
6.4.9 模糊查询加and
Criteria criteria1 = Criteria.where("name").regex("er1");
List<User> users1 = mongoTemplate.find(Query.query(criteria1.and("age").gte(30)), User.class);
users1.forEach(System.out::println);
6.4.10 and or
mongoTemplate.find(Query.query(Criteria.where("name").is("user1").orOperator(Criteria.where("age").is(30))), User.class);
6.4.11 排序
Query querysort = new Query();
querysort.with(Sort.by(Sort.Order.desc("age")));
mongoTemplate.find(querysort, User.class);
6.4.12 分页查询
Query querySortPage = new Query();
querySortPage.with(Sort.by(Sort.Order.desc("id")))
.skip(0)
.limit(1);
List<User> usersSort = mongoTemplate.find(querySortPage, User.class);
usersSort.forEach(System.out::println);
6.4.13 条数(总条数和有条件条数)
long totalcout=mongoTemplate.count(new Query(),ComDataSet.class);
long count = mongoTemplate.count(Query.query(Criteria.where("age").gte(30)), User.class);
System.out.println(count);
6.4.14 去重 distinct
//参数 1:查询条件 参数2:去重字段 参数3: 操作集合 参数4:返回类型
mongoTemplate.findDistinct(new Query(), "age", User.class, Integer.class);
6.4.15 使用json字符串方式查询,也就是类似命令行的输入格式
Query query = new BasicQuery("{$or: [{name: 'user1'},{name: 'user2'}]}", "{name: 1,id: 1}");
List<User> users = mongoTemplate.find(query, User.class);
users.forEach(System.out::println);
6.5 集合的更新
@Test
public void testUpdate() {
Update update = new Update();
update.set("name", "updatename");
//更新符合条件的第一条数据
mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("user3")), update, User.class);
//多条更新
mongoTemplate.updateMulti(Query.query(Criteria.where("name").regex("user")), update, User.class);
//插入更新,没有符合条件的数据时插入数据
update.setOnInsert("id", 10); //指定插入时的设定的id
UpdateResult updateResult = mongoTemplate.upsert(Query.query(Criteria.where("name").is("user3")), update, User.class);
//可以从updateResult获取更新的结果
System.out.println(updateResult.getMatchedCount()); //匹配的数目
System.out.println(updateResult.getModifiedCount()); //修改的数目
System.out.println(updateResult.getUpsertedId()); //插入的id
}
6.6 集合的删除
@Test
public void testRemove() {
//删除所有记录
// mongoTemplate.remove(new Query(), User.class);
//条件删除
mongoTemplate.remove(Query.query(Criteria.where("name").is("user3")), User.class);
}
MongoTemplateTests完整代码
package com.example.springinitializrspringdatamongodb;
import com.example.springinitializrspringdatamongodb.entity.User;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import java.util.Arrays;
import java.util.List;
public class MongoTemplateTests extends SpringInitializrSpringdataMongodbApplicationTests {
//注入MongoTemplate,需要实现构造方法
private final MongoTemplate mongoTemplate;
@Autowired
public MongoTemplateTests(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
//1.创建集合
@Test
public void testCreateCollection() {
boolean exsits = mongoTemplate.collectionExists("users");
if (exsits) {
System.out.println("该集合已存在!");
} else {
mongoTemplate.createCollection("users");
}
}
//2.删除集合
@Test
public void testDropCollection() {
mongoTemplate.dropCollection("users");
}
//文档操作:添加
@Test
public void testAddUser() {
User user = new User(1, "user1", "123");
mongoTemplate.save(user);//save方法,当_id存在时更新数据
// mongoTemplate.insert(user);//insert方法,当当_id存在时冲突,但是适合插入批量数据
//批量插入用insert
List<User> users = Arrays.asList(new User(2, "user2", "123"), new User(3, "user3", "123")); //该方法是将数组转化成List集合的方法
mongoTemplate.insert(users, User.class); //参数2指定放入哪个集合User.class
//mongoTemplate.insert(users, "user");//或者这样指定
}
//文档操作 查询
@Test
public void testFind() {
// //1.查询所有
// List<User> users = mongoTemplate.findAll(User.class);
// //users.forEach(System.out::println);
//
// //2.基于id查询一个
// mongoTemplate.findById(1, User.class);
//
// //3.添加查询 参数1:查询条件 参数2:返回类型
// mongoTemplate.find(new Query(), User.class);
//
// //4.等值查询
// mongoTemplate.find(Query.query(Criteria.where("username").is("user1")), User.class);
//
// //5.> < >= <=
// List<User> users2 = mongoTemplate.find(Query.query(Criteria.where("age").gte(20)), User.class);
// users.forEach(System.out::println);
//
// //6.and查询
// mongoTemplate.find(Query.query((Criteria.where("name").is("user1").and("age").is(30))), User.class);
//
// //7.or查询
// Criteria criteria = new Criteria();
// criteria.orOperator(
// Criteria.where("name").is("user1"),
// Criteria.where("name").is("user1")
// );
// List<User> users3 = mongoTemplate.find(Query.query(criteria), User.class);
// users3.forEach(System.out::println);
//
// //8.模糊查询
// Criteria criteria1 = Criteria.where("name").regex("er1");
// List<User> users1 = mongoTemplate.find(Query.query(criteria1), User.class);
// users1.forEach(System.out::println);
//
//9.模糊查询加and
// Criteria criteria9 = Criteria.where("name").regex("er1");
// List<User> users9 = mongoTemplate.find(Query.query(criteria9.and("age").gte(30)), User.class);
// users1.forEach(System.out::println);
//
// //10.and or
// mongoTemplate.find(Query.query(Criteria.where("name").is("user1").orOperator(Criteria.where("age").is(30))), User.class);
//11.排序
Query querysort = new Query();
querysort.with(Sort.by(Sort.Order.desc("age")));
mongoTemplate.find(querysort, User.class);
//12.分页查询
Query querySortPage = new Query();
querySortPage.with(Sort.by(Sort.Order.desc("id")))
.skip(0)
.limit(1);
List<User> usersSort = mongoTemplate.find(querySortPage, User.class);
usersSort.forEach(System.out::println);
//13 条数(总条数和有条件条数)
long count = mongoTemplate.count(Query.query(Criteria.where("age").gte(30)), User.class);
System.out.println(count);
//14. 去重 distinct
//参数 1:查询条件 参数2:去重字段 参数3: 操作集合 参数4:返回类型
mongoTemplate.findDistinct(new Query(), "age", User.class, Integer.class);
//15. 使用json字符串方式查询,也就是类似命令行的输入格式
Query query = new BasicQuery("{$or: [{name: 'user1'},{name: 'user2'}]}", "{name: 1,id: 1}");
List<User> users = mongoTemplate.find(query, User.class);
users.forEach(System.out::println);
}
//文档操作 更新
@Test
public void testUpdate() {
Update update = new Update();
update.set("name", "updatename");
//更新符合条件的第一条数据
mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("user3")), update, User.class);
//多条更新
mongoTemplate.updateMulti(Query.query(Criteria.where("name").regex("user")), update, User.class);
//插入更新,没有符合条件的数据时插入数据
update.setOnInsert("id", 10); //指定插入时的设定的id
UpdateResult updateResult = mongoTemplate.upsert(Query.query(Criteria.where("name").is("user3")), update, User.class);
//可以从updateResult获取更新的结果
System.out.println(updateResult.getMatchedCount()); //匹配的数目
System.out.println(updateResult.getModifiedCount()); //修改的数目
System.out.println(updateResult.getUpsertedId()); //插入的id
}
//文档操作 删除
@Test
public void testRemove() {
//删除所有记录
// mongoTemplate.remove(new Query(), User.class);
//条件删除
mongoTemplate.remove(Query.query(Criteria.where("name").is("user3")), User.class);
}
}