MongoDB - docker 安装并集成 SpringBoot

Docker 安装 mongo

  1. 拉取镜像
docker pull mongo:4.4
  1. 查看镜像
docker images
  1. 启动容器
docker run -itd --name mongo \
-v /docker_volume/mongodb/data:/data/db \
-p 27017:27017 mongo:4.4 --auth
  1. 登录 mongo 容器,并进入到 [admin] 数据库
docker exec -it mongo mongo admin
  1. 创建一个用户, mongo默认没用户
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

【user:'root'】:设置用户名为root
【pwd:'123456'】:设置密码为123456
【role:'userAdminAnyDatabase'】:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
【db: 'admin'】:可操作的数据库
【'readWriteAnyDatabase'】:赋予用户读写权限

测试连接

  1. 连接 mongo 数据库
db.auth('root','123456');
  1. 测试 mongo 数据库,插入一条语句
db.user.insert({"name":"zhangsan","age":18});
  1. 测试 mongo 数据库, 查询刚插入的数据
db.user.find();

SpringBoot 继承 MongoDB

  1. 准备一个SpringBoot项目,导入 pom 依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
             <version>2.3.9.RELEASE</version>
        </dependency>
  1. 添加 yml 文件配置
spring:
  data:
  mongodb:
    authentication-database: admin  
    host: 127.0.0.1   # 服务器IP地址 
    port: 27017      
    database: test    # 数据库名称 /不存在会自动创建
    username: root    # 开始创建用户时账号
    password: '123456'
  1. 编写实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(value = "tb_person")
//指定实体类和数据库文档的映射关系 默认实体类名 数据库如果没有该文档,会自动创建
public class Person {
    //mongoDB推荐使用ID
    @Id
    private ObjectId id;
    //指定属性名和数据库域的映射关系   默认属性名
    @Field("person_name")
    private String name;
    private int age;
    private String address;
}
  1. 编写测试类
@SpringBootTest
public class mongoDBTest {

    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 多条件查询
     */
    @Test
    public void find() {
        //设置查询条件 age小于30,且person_name="张三"
        Criteria criteria = Criteria.where("age").lt(30)
                .and("person_name").is("张三");

        //设置查询条件
        Query query = new Query(criteria);
        //查询
        List<Person> list = mongoTemplate.find(query, Person.class);

        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 分页查询
     */
    @Test
    public void findPage() {
        //设置查询条件 age小于30,且person_name="张三"
        Criteria criteria = Criteria.where("age").lt(30)
                .and("person_name").is("张三");

        //根据条件 查询总数
        Query queryCount = new Query(criteria);
        long count = mongoTemplate.count(queryCount, Person.class);


        //查询当前页的数据列表, 查询第二页,每页查询2条
        Query queryLimit = new Query(criteria)
                .with(Sort.by(Sort.Order.desc("age")))
                .limit(2)//每页查询条数
                .skip(2); //从第几页开始 (page-1)*size

        List<Person> list = mongoTemplate.find(queryLimit, Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 更新数据
     */
    @Test
    public void update() {
        //设置查询条件 age小于30,且person_name="张三"
        Criteria criteria = Criteria.where("person_name").is("王五");
        //设置更新条件
        Query query = new Query(criteria);
        //设置更新数据
        Update update = new Update();
        update.set("age", 16);
        mongoTemplate.upsert(query, update, Person.class);
    }

    /**
     * 保存
     */
    @Test
    public void save() {
        Person person = new Person();
        person.setName("李四");
        person.setAge(20);
        mongoTemplate.save(person);
    }

    /**
     * 删除数据
     */
    @Test
    public void dlete() {
        mongoTemplate.remove(Query.query(Criteria.where("person_name").is("张三")), Person.class);
    }
  1. 运行测试类的 save() 方法,进入数据库查看数据
    image-20230729161849009
    image-20230729161911362
posted @   陈铭X  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示