使用MyBatisPlus的方式,优雅的操作MongoDB

MongoPlus是一个新框架,使用MyBatisPlus的方式操作MongoDB,可以说,会用MP就会用这个框架,和mp一样,只需继承即可快速构建CRUD操作

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MyBatisPlus

gitee地址:https://gitee.com/anwena/mongo-plus/ 官网地址:https://www.mongoplus.cn/

接下来让我们看该如何使用它快速的进行CRUD操作

首先!你要有一个SpringBoot项目!并且使用在配置文件中配置MongoPlus

这是我的XML文件 ↓↓↓↓↓↓↓

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/>
    </parent>

    <groupId>com.mongoplus.bolg</groupId>
    <artifactId>mongo-plus-bolg</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.gitee.anwena</groupId>
            <artifactId>mongo-plus-boot-starter</artifactId>
            <!-- 使用最新版 -->
            <version>2.0.7.3</version>
        </dependency>
    </dependencies>

</project>

yml配置文件 ↓↓↓↓↓↓↓

mongo-plus:
  data:
    mongodb:
      host: 127.0.0.1
      port: 27017
      database: blog
      #账号密码没有的话就不用写
	  #username: 
	  #password:
      connectTimeoutMS: 50000
      waitQueueTimeoutMS: 50000
  log: true

然后!你要有一个实体类!

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

	//使用ID注解,标识这是_id字段,执行type为ASSIGN_ID,使用雪花算法生成id
    @ID(type = IdTypeEnum.ASSIGN_ID)
    private String id;

    private String userName;

    private Integer userStatus;

    private Integer age;

    private Role role;

}

之后!你要有你的Service!并且将Service继承Iservice,实现类则继承ServiceImpl

Service接口 ↓↓↓↓↓↓↓

public interface UserService extends IService<User> {
}

ServiceImpl实现类 ↓↓↓↓↓↓↓

@Service
public class UserServiceImpl extends ServiceImpl<User> implements UserService {
}

到这里就已经配置完了!多么简单就配置完了

当然,提供了一个类:MongoPlusMapMapper,就是为了Mongo集合结构比较复杂时使用的,会返回一个map结构,直接注入即可使用

接下来!开始测试~~~

首先编写一个测试类,进行save测试!!! ↓↓↓↓↓↓↓

@SpringBootTest
public class BlogTest {

	//注入我的service
    @Resource
    private UserService userService;

    @Test
    public void insertTest(){
    	//创建user对象
        User user = new User();
        user.setUserName("张三");
        user.setUserStatus(1);
        user.setAge(18);

        Role role = new Role();
        role.setRoleName("超级管理员");
        role.setRoleIntroduce("拥有最高权限");
        user.setRole(role);
        //直接使用继承IService提供的save方法,和mp一样!
        Boolean save = userService.save(user);
        System.out.println(save?"添加成功":"添加失败");      
    }
}

测试代码写完了,执行!

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MongoDB_02

添加成功,完全没问题!因为我在配置文件中配置了log:true,打印了sql日志和返回结果!

添加测试完了,接下来我们在进行一个查询操作!来验证我们刚刚添加的用户有没有添加到数据库里,走起~~

进行查询,还是使用IService提供的方法 ↓↓↓↓↓↓↓

@Test
    public void findTest(){
        List<User> userList = userService.list();
        userList.forEach(System.out::println);
    }

好!代码写完了,执行!

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MyBatisPlus_03

完美,成功验证我们刚刚添加的数据,id也是雪花算法类型,并且成功的映射到了我们的实体类中

是不是非常简单就实现了CRUD的操作,可以一个MP打遍天下了!

当然,MyBatisPlus的链式查询是一个特点,MongoPlus也有!接下来我们来写一个链式查询的示例

我已经提前加了四条数据,用来做查询:

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MongoTemplate_04

好!开始进行lambda链式查询!我们要查询用户状态为1的,并且年龄大于20岁的

@Test
    public void lambdaTest(){
        List<User> userList = userService.lambdaQuery().eq(User::getUserStatus, 1).gt(User::getAge, 20).list();
        userList.forEach(System.out::println);
    }
查看执行结果!

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MyBatisPlus_05

非常完美!超级方便的链式调用,我会MyBatisPlus之后,就自动学会了MongoDB了?

SpringBoot使用MyBatisPlus的方式,优雅的操作MongoDB -----MongoPlus_MongoPlus_06

妈妈再也不用担心我学习MongoDB了