SpringBoot集成Mongodb

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了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值