1.什么是mongodb?
MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活,支持动态查询和索引,也支持json格式和bson格式的数据存储,这种格式可以支持读取和写入大量的数据。
2.Docker安装mongoDB
2.1拉取镜像
docker pull mongo:4.4
2.2创建mongo数据持久化目录 (看自己爱好,放哪里都行)
mkdir -p /docker_volume/mongodb/data
2.3启动容器
docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth
2.4创建用户
1.使用以下命令进入容器的 MongoDB shell:
docker exec -it mongo mongo admin
2.创建一个用户,mongo 默认没有用户
db.createUser({
user: '输入创建的用户名',
pwd: '输入自己的密码',
roles: [
{ role: 'readWriteAnyDatabase', db: 'admin' },
{ role: 'dbAdminAnyDatabase', db: 'admin' }
]
});
命令解释:
-d:表示在后台运行容器,并返回容器 ID。
-i:表示交互式运行容器,保留 STDIN 打开。
--name mongo-service:为容器指定一个名称,这里为 mongo-service。
--restart=always:表示在容器退出后自动重启容器。
-p 27017:27017:将容器的 27017 端口映射到宿主机的 27017 端口。
-v ~/data/mongodata:/data:将宿主机的 ~/data/mongodata 目录挂载到容器的 /data 目录下,用于持久化存储数据。
mongo:指定要运行的镜像名称,这里为官方的 MongoDB 镜像。
3.SpringBoot整合mongoDB步骤
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置
spring:
data:
mongodb:
host: 自己的ip地址
port: 27017
username: 自己的用户名
password: 自己的密码
authenticationDatabase: admin
database: test
第一种方式使用MongoTemplate工具类
1. 添加映射
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
/**
* 映射表 test_demo
*/
@Data
@Document("test_demo")
public class TestDemo implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private Date birthDay;
}
2.测试
/**
* MongoDB测试类
* */
@SpringBootTest(classes = MongoApplication.class)
@RunWith(SpringRunner.class)
public class MongoTest1 {
@Autowired
private MongoTemplate mongoTemplate;
//保存
@Test
public void saveTest(){
for (int i = 0; i < 10; i++) {
TestDemo testDemo = new TestDemo();
testDemo.setName("张三");
testDemo.setBirthDay(new Date());
mongoTemplate.save(testDemo);
}
TestDemo testDemo = new TestDemo();
testDemo.setName("张三你吃饭了吗");
testDemo.setBirthDay(new Date());
mongoTemplate.save(testDemo);
}
//查询一个
@Test
public void saveFindOne(){
TestDemo testDemo = mongoTemplate.findById("661743b77bee2f0a5739819d", TestDemo.class);
System.out.println(testDemo);
//TestDemo(id=661743b77bee2f0a5739819d, name=张三, birthDay=Thu Apr 11 09:58:15 CST 2024)
}
//条件查询
@Test
public void testQuery(){
//查询字段name为张三的数据(多条件查询)
Query query = Query.query(Criteria.where("name").is("张三"))
.with(Sort.by(Sort.Direction.DESC,"birthDay"));
// 执行查询 模糊查询 只查询5条数据
Query query1 = Query.query(Criteria.where("name").regex(".*?\\" + "张三" + ".*"));
query.limit(5);
List<TestDemo> list = mongoTemplate.find(query, TestDemo.class);
List<TestDemo> list1 = mongoTemplate.find(query1, TestDemo.class);
System.out.println("list:"+list);
System.out.println("list1:"+list1);
}
//测试删除
@Test
public void testDel(){
mongoTemplate.remove(Query.query(Criteria.where("name").is("张三")),TestDemo.class);
}
}
第二种方式使用继承MongoRepository
1.添加映射
@Data
@Document(collection = "users")
public class User {
@Id
private String id;
@Indexed(unique = true)
private String name;
private Integer age;
}
2.controller层
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
// 添加
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
// 详细
@GetMapping("/{id}")
public User getUser(@PathVariable String id) {
return userRepository.findById(id).orElse(null);
}
// 删除
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable String id) {
userRepository.deleteById(id);
}
// 修改
@PutMapping("/{id}")
public User updateUser(@PathVariable String id, @RequestBody User user) {
User userFromDb = userRepository.findById(id).orElse(null);
if (userFromDb != null) {
userFromDb.setName(user.getName());
userFromDb.setAge(user.getAge());
return userRepository.save(userFromDb);
}
return null;
}
// 列表
@GetMapping
public Iterable<User> getAllUsers() {
return userRepository.findAll();
}
}
3.repository层
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}
最后就OK了!!!