Spring Boot 整合 MongoDB
安装和启动
docker 方式安装
- 拉取镜像
bash
docker pull mongo:7.0.0
- 启动容器
bash
docker run -d --restart=always -p 27017:27017 --name mongo -v /data/mongodb/db:/data/db mongo:7.0.0
- 连接 mongo
bash
docker exec -it mongo mongosh
命令操作 Mongodb
- 文档操作
bash
db.User.insert({name:'lucy',age:20,sex:true})
- 查询
bash
db.User.find()
db.User.find({name:'lucy1'})
- 修改
bash
db.User.update({age:20}, {$set:{name:100}})
- 删除
bash
db.User.remove({})
SpringBoot 整合 MongoDB
MongoRepository 方式
添加 Maven 依赖
xml
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
定义 Entity
java
@Data
@Document("user")
public class User {
@Id
private ObjectId id;
private String name;
private Integer age;
private String email;
private Date createDate;
}
定义 Repository
java
@Repository
public interface UserRepository extends MongoRepository<User, ObjectId> {
}
编写测试类
java
@SpringBootTest
public class MongoApplicationTest {
@Autowired
private UserRepository userRepository;
/**
* 添加
*/
@Test
public void add() {
User user = new User();
user.setAge(18);
user.setName("lcd");
user.setCreateDate(new Date());
userRepository.save(user);
}
/**
* 查询所有
*/
@Test
public void findAll() {
List<User> list = userRepository.findAll();
System.out.println(list);
}
/**
* 根据id查询
*/
@Test
public void testFindById() {
Optional<User> optional =
userRepository.findById(new ObjectId("669dd08552772e355c95e593"));
boolean present = optional.isPresent();
if(present) {
User user = optional.get();
System.out.println(user);
}
}
/**
* 条件查询 + 排序
*/
@Test
public void testFindCondition() {
//封装条件
User user = new User();
user.setAge(18);
Example<User> example = Example.of(user);
Sort sort = Sort.by(Sort.Direction.DESC, "name");
List<User> list = userRepository.findAll(example, sort);
System.out.println(list);
}
/**
* 分页查询
*/
@Test
public void testPage() {
//第一页从0开始的
PageRequest pageable = PageRequest.of(0,2);
Page<User> page = userRepository.findAll(pageable);
List<User> list = page.getContent();
System.out.println(list);
}
/**
* 更新
*/
@Test
public void testUpdateUser(){
//注意:先查询,再更新
Optional<User> optional = userRepository.findById(
new ObjectId("669dd08552772e355c95e593")
);
if(optional.isPresent()){
User user = optional.get();
user.setAge(30);
//user中包含id,就会执行更新
userRepository.save(user);
System.out.println(user);
}
}
/**
* 删除
*/
@Test
public void testDeleteUser(){
userRepository.deleteById(
new ObjectId("669dd08552772e355c95e593")
);
}
}
application.yml 配置连接信息
yml
spring:
data:
mongodb:
database: test # 数据库名称
host: 10.13.3.21
port: 27017
MongoTemplate 方式
java
@SpringBootTest
public class MongoTemplateTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 添加
*/
@Test
public void add() {
User user = new User();
user.setName("test");
user.setAge(20);
user.setCreateDate(new Date());
mongoTemplate.insert(user);
}
/**
* 查询所有
*/
@Test
public void findAll() {
List<User> list = mongoTemplate.findAll(User.class);
list.forEach(user->{
System.out.println(user);
});
}
/**
* 根据Id查询
*/
@Test
public void testFindId() {
User user = mongoTemplate.findById("669dd33ba0debe5f5000aa02", User.class);
System.out.println(user);
}
/**
* 条件查询
*/
@Test
public void testCondition() {
// where name=? and age=?
Criteria criteria =
Criteria.where("name").is("test").and("age").is(20);
Query query = new Query(criteria);
List<User> list = mongoTemplate.find(query,User.class);
System.out.println(list);
}
/**
* 分页查询
*/
@Test
public void testPage() {
// limit 0,2
Query query = new Query();
List<User> list = mongoTemplate.find(query.skip(0).limit(2), User.class);
list.forEach(user->{
System.out.println(user);
});
}
/**
* 更新
*/
@Test
public void testUpdateUser() {
Criteria criteria = Criteria.where("_id").is("669dd33ba0debe5f5000aa02");
Query query = new Query(criteria);
Update update = new Update();
update.set("name", "zhangsan");
update.set("age", 99);
UpdateResult result = mongoTemplate.upsert(query, update, User.class);//改一条
//UpdateResult result = mongoTemplate.updateMulti(query, update, User.class);//改多条
long count = result.getModifiedCount();
System.out.println(count);
}
/**
* 删除
*/
@Test
public void testRemove() {
Criteria criteria = Criteria.where("_id").is("669dd33ba0debe5f5000aa02");
Query query = new Query(criteria);
DeleteResult result = mongoTemplate.remove(query, User.class);
long count = result.getDeletedCount();
System.out.println(count);
}
}