Spring Boot —— 集成 MyBatis-Plus
项目基于 Spring Boot 3.2.5
Pom
需要注意的是,引用 Mybatis-Plus 依赖,无需手动引入 Mybatis
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis-plus-generator -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis-plus 自动生成时使用的模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
application.yml
spring:
profiles:
active: develop
application-develop.yml
mybatis-plus:
# mybatis xml 文件的保存路径,classpath 表示 java 或 resources 目录,因此当前设置表示 resources/mapper/任意子目录/*Mapper.xml 文件都会被扫描
mapper-locations: classpath:mapper/**/*Mapper.xml
# 表示实体对象所在的命名空间
type-aliases-package: com.cash216.mango.*.entity
# mybatis-plus 配置文件,可选
# config-location: classpath: config/MyBatisConfig.xml
configuration:
# 日志输出方式
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 逻辑删除配置
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: del_flag
自动生成Service、Model(Entity)、Mapper
引入mybatis-plus-generator
可用于基于数据库自动生成各层文件,基本步骤如下:
- 引入依赖
- 配置数据连接
- 编写自动生成运行代码
- 完善自动生成文件业务逻辑
引入依赖
在 pom 节已列举,不再重复
配置数据连接
以application-develop.yml
为例
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.driver
url: jdcb:mysql://127.0.0.1:3306/{database}?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
password: 123456
实际这一步不影响自动生成,因为在编写自动生成运行代码时还需要设置
编写自动生成文件的运行代码
新建java文件如CodeGenerator.java
,编写代码如下:
package com.cash216.mangoAdmin.codegenerator;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class CodeGenerator {
private static final String databaseUrl = "jdbc:mysql://127.0.0.1:3306/{database}?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true";
private static final String databaseUser = "root";
private static final String databasePassword = "123456";
public static String scanner(String tip){
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入").append(tip).append(":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (ipt != null && !ipt.isEmpty()) {
return ipt;
}
}
throw new MybatisPlusException(STR."请输入正确的\{tip}");
}
public static void main(String[] args){
// 本例使用 Mybatis-plus 交互式生成方式,会询问作者、包名、表名后自动生成各层目录及文件
FastAutoGenerator.create(databaseUrl, databaseUser, databasePassword)
.globalConfig((scanner, builder)->
builder.author(scanner.apply("请输入作者名称"))
.commentDate("yyyy-MM-dd")
// System.getProperty("user.dir") 表示整个项目的根目录
.outputDir(System.getProperty("user.dir") + "/mango-admin/src/main/java"))
.packageConfig((scanner, builder)-> builder.parent(scanner.apply("请输入包名")))
.strategyConfig((scanner, builder)-> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔,所有输入 all")))
.entityBuilder()
.enableLombok()
.addTableFills(new Column("create_time", FieldFill.INSERT))
.build())
.execute();
}
protected static List<String> getTables(String tables){
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
}
运行main
方法,在控制台会以交互方式询问作者、包名、表名后生成文件,需要注意的是,在本例中,使用outputDir(System.getProperty("user.dir") + "/mango-admin/src/main/java")
控制生成文件的输出目录,user.dir
返回当前工作目录在本例运行时就是整个项目的根目录, 生成后的效果如图
完善业务代码
本来*Mapper.xml
文件是生成在mapper/xml
目录下的,在本例中是后移动到resources/mapper/system
中,当然也可以不移动,配置文件中mapper-locations: classpath:mapper/**/*Mapper.xml
可以找到。
另外,自动生成的Mapper接口需要增加依赖注入被SpringBoot管理,方法(至少)有两种,第一种在Mapper接口文件上增加@Mapper
注解,这种方式如果接口文件很多会不方便容易遗漏,第二种增加一个配置类,使用@MapperScan
指定要扫描的包下的Mapper接口,代码如下:
@Configuration
@MapperScan("com.cash216.mango.admin.mapper")
public class MyBatisConfig {
}
主要是@MapperScan
起作用,MyBatisConfig类中甚至可以是空的
使用
不知道是本来就这样还是我使用有问题,生成的所有文件,除了实体对象外,其他文件里边都是空的
Mybatis-plus 自带一些通用接口方法,可直接调用,比如根据Id查询记录
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
@Override
public SysUser findById(Long id){
return baseMapper.selectById(id);
}
}
Mybatis-plus 没有的方法需自行添加实现,需要添加Mapper.xml、Mapper接口文件、IService、ServiceImpl、Controller,在这里只列出ServiceImpl中的代码为例
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
@Override
public SysUser findById(Long id){
return baseMapper.selectById(id);
}
@Override
public SysUser findByName(String name){
return baseMapper.selectOne(new QueryWrapper<SysUser>().eq("name", name));
}
}