SpringBoot整合MongoDB

Lou.Chen
大约 2 分钟

springboot整合MongoDB

一、docker安装mongodb

1、拉取最近的镜像

docker pull

2、初始化mongo容器

-d 后台运行 -p 端口映射 --name 容器名称 --restar docker每次重启后,该容器也启动 -e 参数设置

初始化用户名为root 密码为147258369

docker run -d -p 27017:27017 --name mongo01 --restart=always -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=147258369 mongo

3、每个数据库有独立的账号和密码
①进入容器

docker exec -it 容器id bash

②进入mongo

mongo

③切换到admin数据库

use admin

④添加用户操作的对应数据库

db.createUser({user:"admin",pwd:"xiiasdfiik34",roles:[{role: 'root', db: 'admin'}]})

⑤ 验证

db.auth('admin', 'xiiasdfiik34') // 返回1 就是认证成功

二、使用MongoRepository

1、pom.xml

spring-boot-starter-data-mongodb

 <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
2、yaml配置
spring:
  data:
    mongodb:
      #      mongodb每个库都有自己的认证方式
      authentication-database: lc
      username: root
      password: 147258369
      port: 27017
      database: lc
      uri: mongodb://root:147258369@47.96.141.44:27017/lc
#      host: 47.96.141.44
3、实体
@Getter
@Setter
@ToString
public class Book {
    private Integer id;
    private String name;
    private String author;
}
4、dao接口
/**
 * 继承MongoRepository
 * 第一个参数为 操作的实体
 * 第二个参数为  操作的主键类型
 */
public interface BookDao extends MongoRepository<Book,Integer> {

    /**
     * 和jap一致 遵循方法名称的表达式进行查询
     * @param name
     * @return
     */
    List<Book> findBooksByNameContaining(String name);

}

5、测试使用
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RedisApplication.class)
public class mongoTest {

    @Autowired
    private BookDao bookDao;

    //插入一条数据
    @Test
    public void Test1() {
        Book b = new Book();
        b.setId(3);
        b.setName("红楼梦");
        b.setAuthor("曹雪芹");
        bookDao.insert(b);
    }

    @Test
    public void Test2() {
        //查询所有
        List<Book> all = bookDao.findAll();
        System.out.println(all);
        //查询包含书名称为 “红” 的book
        //这里满足名称表达式 和jpa类似
        List<Book> list = bookDao.findBooksByNameContaining("红");
        System.out.println(list);
    }
}

三、使用MongoTemplate

1、pom.xml

和上面配置一致

2、yaml配置

和上面配置一致

3、实体

和上面配置一致

4、直接使用(和RedisTmeplate类似)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RedisApplication.class)
public class mongoTest {
    
    @Autowired
    private MongoTemplate mongoTemplatel;

    @Test
    public void Test3() {
        Book book = new Book();
        book.setId(4);
        book.setName("水浒传");
        book.setAuthor("施耐庵");
        //插入数据
        mongoTemplatel.insert(book);

        //查询所有
        List<Book> all = mongoTemplatel.findAll(Book.class);
        System.out.println(all);
    }

}