MybatisPlus简介
Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。
以上介绍摘取自Mybatis-Plus官网,如果你已经掌握了Mybatis的基本用法,那么使用MP可以使开发过程更加丝滑,本文将对SpringBoot项目集成Mybatis-Plus进行介绍
注意:本文基于最新的3.5.2版本进行介绍,与2.x版本在使用上略有区别,详情请参考官网
新建SpringBoot项目并引入依赖
<!--以下为核心依赖-->
<!--Mybatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<!--velocity模板引擎,生成代码-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--Api文档-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
完善配置文件application.yml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
# 使用默认的Hikari数据源
type: com.zaxxer.hikari.HikariDataSource
# 配置Mybatis-Plus
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
mapper-locations: classpath*:/mapper/*Mapper.xml
在测试项目中新建CodeGenerator
package com.springbootdemo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
public class CodeGenerator {
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
"root", "123456");
/**
* 执行 run
*/
public static void main(String[] args) {
// 文件输出路径要使用绝对路径,否则可能会出错!
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
.globalConfig(builder -> {
builder.author("wzc") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("/Users/wuzhaochen/IdeaProjects/springboot-demo/src/main/java/"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.springbootdemo") // 设置父包名
.pathInfo(Collections.singletonMap(OutputFile.xml,
"/Users/wuzhaochen/IdeaProjects/springboot-demo/src/main/java/")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_user") // 设置需要生成的表名,多个表用,隔开
.addTablePrefix("t_") // 设置过滤表前缀
.controllerBuilder().enableRestStyle().enableHyphenStyle()
.serviceBuilder().formatServiceFileName("%sService")
.entityBuilder().idType(IdType.ASSIGN_ID).enableLombok() // 使用雪花算法生成全局唯一ID,开启Lombok简化getter,setter
.logicDeleteColumnName("is_deleted") // 数据表对应逻辑删除的字段
.logicDeletePropertyName("deleted"); // 实体类对应逻辑删除的属性
})
.execute();
}
}
运行之后神奇的事情发生了:从DAO层到service层到controller层,包括实体类entity全部自动生成
在SpringBoot项目启动类处加上包扫描注解@MapperScan
package com.springbootdemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.springbootdemo.mapper")
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
至此,Mybatis-Plus的基本配置就完成了,接下来使用MP完成基础增删改查操作
package com.springbootdemo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.springbootdemo.entity.User;
import com.springbootdemo.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserService userService;
@Test
public void addRecord() {
// 使用雪花算法自动生成ID,所以此处ID可以为空
User user = new User(null, "小明", "111111", "1234@qq.com", 0);
userService.save(user);
}
@Test
public void updateRecord() {
// QueryWrapper为条件构造器,根据指定条件搜索记录
User user = userService.getOne(new QueryWrapper<User>().eq("username", "小明"));
user.setPassword("222222");
userService.updateById(user);
}
@Test
public void deleteRecord() {
userService.removeById("111111");
}
@Test
public void countRecord() {
System.out.println("User表的总记录数为:" + userService.count());
}
}
小结
就开发的体验感而言,Mybatis-Plus是本人目前用过的最丝滑的持久层框架了,在它的加持下,开发效率大大提升。但是对于后端的初学者来说,我个人不建议直接上手MP,毕竟写SQL是后端的基本功,建议新手小白多写SQL语句,在有了一定的功底和熟练度之后,再来使用MP