目录
1.前言
2.特性
3.开始使用
4.演示自动生成过程java+xml
5.改动UserLoginController(测试自带的CRUD)
6.自定义SQL语句
7.Swagger2接口文档配置类
8.完整自动生成类FastAutoGeneratorTest.java
9.总结
Github源码地址:https://github.com/GuiZhouAndroid/mybatisDemo
MyBatis-Plus (简称 MP)是Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
本章主要是配置MP及代码自动生成器相关测试,没有介绍MP主要功能使用。
下一章介绍使用MP封装的CRUD接口与MySQL数据交互的教程,传送门链接:
(Mybatis笔记)Mybatis-Plus——封装接口IService使用(一)
CSDN链接:https://blog.csdn.net/qq_39038178/article/details/120612802
(Mybatis笔记)Mybatis-Plus——封装接口IService使用(二)
CSDN连接:https://blog.csdn.net/qq_39038178/article/details/120668991
(1)创建一个SpringBoot工程项目
这里我之前写过创建步骤,教程如下:
CSDN链接:(Spring笔记)IDEA创建SpringBoot项目工程
(2)工程准备好之后,在pom.xml中引入mybatis-plus+mysql及相关依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.3.4version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.5.1version>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.31version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.20version>
<scope>providedscope>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.78version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger2artifactId>
<version>2.9.2version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger-uiartifactId>
<version>2.9.2version>
dependency>
(3) 首先,贴出我的MySQL建表语句(增加两条用户数据)
drop table if exists t_user_login;
/*==============================================================*/
/* Table: t_user_login */
/*==============================================================*/
create table t_user_login
(
ul_id int not null auto_increment comment '登录自增ID',
ul_username varchar(255) not null comment '登录名',
ul_password varchar(255) not null comment '登录密码',
primary key (ul_id),
unique key AK_Key_2 (ul_username)
);
alter table t_user_login comment '用户登录表';
insert into t_user_login (ul_username,ul_password) values ('admin','admin');
insert into t_user_login (ul_username,ul_password) values ('root','root');
(4) 依赖准备好后,创建Java类,在main()方法中:配置连接mysql数据库信息+调用自动生成API并设置各类参数,根据自定义策略,执行自动生成代码操作。这里新建一个FastAutoGeneratorTest.java,提供主方法main()。
***数据库配置***:
/**
* 数据源配置
*/
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "mysql用户名", "mysql密码")
.dbQuery(new MySqlQuery()) //数据库查询
.schema("mybatis-plus") //数据库schema(部分数据库适用)
.typeConvert(new MySqlTypeConvert()) //数据库类型转换器
.keyWordsHandler(new MySqlKeyWordsHandler()); //数据库关键字处理器
***全局配置***:提醒:开启swagger2需要添加依赖哟(上述已添加)—— .enableSwagger()
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置
.globalConfig((scanner, builder) -> builder
.fileOverride() //覆盖已生成文件,默认值:false
.outputDir(System.getProperty("user.dir") + "/src/main/java") //指定输出目录,默认值: windows:D://
.author(scanner.apply("请输入开发者名称:"))//作者名,baomidou 默认值:作者
.dateType(DateType.TIME_PACK)//时间策略,DateType.ONLY_DATE 默认值: DateType.TIME_PACK
.commentDate("yyyy-MM-dd")//注释日期,默认值: yyyy-MM-dd
//.disableOpenDir()// 禁止打开输出目录,默认值:true
//.enableKotlin() //开启 kotlin 模式,默认值:false
.enableSwagger() //开启 swagger 模式,默认值:false
.build()//加入构建队列
)
***包配置***:
// 包配置
.packageConfig((scanner, builder) -> builder
.parent(scanner.apply("请输入包名:"))//父包名,默认值:com.baomidou
//.moduleName("sys")//父包模块名,默认值:无
.entity("entity")//Entity 包名,默认值:entity
.service("service")//Service 包名,默认值:service
.serviceImpl("service.impl")//Service Impl 包名,默认值:service.impl
.mapper("mapper")//Mapper 包名,默认值:mapper
.xml("mapper.xml")//Mapper XML 包名,默认值:mapper.xml
.controller("controller")//Controller 包名,默认值:controller
//.other("other")//自定义文件包名, 输出自定义文件时所用到的包名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "src/main/resources/mapper")) //路径配置信息,Collections.singletonMap(OutputFile.mapperXml, "D://")
.build()//加入构建队列
)
***模板引擎***:
//模板配置
.templateConfig((scanner, builder) -> builder
//.disable()//禁用所有模板
//.entityKt("/templates/entity.java")// 设置实体模板路径(kotlin),/templates/entity.java
.disable(TemplateType.ENTITY)//禁用模板 TemplateType.ENTITY
.entity("/templates/entity.java") //设置实体模板路径(JAVA),/templates/entity.java
.service("/templates/service.java")//设置 service 模板路径,/templates/service.java
.serviceImpl("/templates/serviceImpl.java")//设置 serviceImpl 模板路径,/templates/serviceImpl.java
.mapper("/templates/mapper.java")//设置 mapper 模板路径,/templates/mapper.java
.mapperXml("/templates/mapper.xml")//设置 mapperXml 模板路径,/templates/mapper.xml
.controller("/templates/controller.java")//设置 controller 模板路径,/templates/controller.java
.build()//加入构建队列
)
***注入配置——自定义模板***:tableInfo和objectMap会在控制台输出表和对象信息
//注入配置————自定义模板
.injectionConfig(builder -> builder
.beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
}) //输出文件之前消费者
.customMap(Collections.singletonMap("my_field", "你好!这是我自己注入的属性哦")) //自定义配置 Map 对象
//.customFile(Collections.singletonMap("test.txt", "/templates/test.vm")) //自定义配置模板文件
.build()//加入构建队列
)
***策略配置***:
// 策略配置
/**
* schema:在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。
* 一般情况下一个用户对应一个集合,所以为了区分不同的集合就需要给不同的集合起名字。
* 用户的schema名就相当于用户名,并作为该用户缺省schema。所以说schema集合看上去像用户名。
* 例如当我们访问一个数据表时,如果该表没有指明属于哪个schema,系统就会自动的加上缺省的schema。
*/
.strategyConfig(builder -> builder
/** 基本参数配置 */
.enableCapitalMode()//开启大写命名,默认值:false
.enableSkipView()//开启跳过视图,默认值:false
.disableSqlFilter()//禁用 sql 过滤,默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
.likeTable(new LikeTable("t_user_login"))//模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
/** 设置需要生成的表名 */
.addInclude("t_user_login")// 增加表匹配(内存过滤),include 与 exclude 只能配置一项
/** 前缀配置*/
.addTablePrefix("t_")//增加过滤表前缀
//.addFieldSuffix("_")//增加过滤表后缀
//.addFieldPrefix("ul_")//增加过滤字段前缀 本人不建议使用,去掉后缀,会导致驼峰命名实体类的变量名不带前缀,去掉后,错误:Username,正确:ulUsername
//.addFieldSuffix("_")//增加过滤字段后缀
注意+警告+重点:
过滤表前缀addTablePrefix():是过滤表数据库字段名前缀的,例如:数据库字段名“ul_username”,使用“ addTablePrefix("ul_") ;”,生成的Bean实体类,用户名对应的私有属性名称就会自动为“ username ”,不使用过去字段前缀,生成的属性名称就是“ ulUsername ”,这里有个坑,数据库表字段,如果是“ ul_username ”,那么使用过滤前缀“ addTablePrefix("ul_") ;” 会导致,查询结果为null,因此强烈建议不使用该过滤前缀方法。这是新版本出现的问题,请知悉。本人亲自踩坑!!!!(记得实体类策略配置时,表名和字段都设置为驼峰命名哦,两者不设置的话,默认就是驼峰格式)
查询空数据示例
***实体策略配置***:策略配置同级(紧接上方策略配置)
/** 实体策略配置 */
.entityBuilder()//实体策略配置
.disableSerialVersionUID()//禁用生成 serialVersionUID,默认值:true
.enableLombok()//开启 lombok 模型,默认值:false
.enableChainModel()//开启链式模型,默认值:false
.enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀,默认值:false
.enableTableFieldAnnotation()//开启生成实体时生成字段注解,默认值:false
.enableActiveRecord()//开启 ActiveRecord 模型,默认值:false
.naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略,默认下划线转驼峰命名:NamingStrategy.underline_to_camel
.columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体属性的命名策略,默认为 null,未指定按照 naming 执行
.idType(IdType.AUTO)//全局主键类型
.formatFileName("%sBean")//格式化文件名称,生成实体的后缀,建议这样使用,生成后:UserLoginBean
//.superClass(BaseEntity.class)//设置父类
//.enableColumnConstant()//开启生成字段常量,默认值:false
//.addIgnoreColumns("age")//添加忽略字段
//.nameConvert(INameConvert)//名称转换实现
//.versionColumnName("version")//乐观锁字段名(数据库)
//.versionPropertyName("version")//乐观锁属性名(实体)
//.logicDeleteColumnName("deleted")//逻辑删除字段名(数据库)
//.logicDeletePropertyName("deleteFlag")//逻辑删除属性名(实体)
//.enableSchema()//启用 schema,默认值:false,多 schema 场景的时候打开
//.addExclude("t_simple")//增加表排除匹配(内存过滤),include 与 exclude 只能配置一项
//.notLikeTable(new LikeTable("USER"))//模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
注意+警告+重点:以下两个记得加上,作用于实例类的驼峰命名,否则会有类名会有下划线,如果不这两个属性,默认值均为:NamingStrategy.underline_to_camel
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
***controller策略配置***:
/** controller 策略配置 */
.controllerBuilder()//controller 策略配置
.enableHyphenStyle()//开启驼峰转连字符,默认值:false
.enableRestStyle()//开启生成@RestController 控制器,默认值:false
.formatFileName("%sController")//格式化文件名称——controller包下自动生成的类后缀,例如UserLoginController
***Service策略配置***:
/** Service 策略配置 */
.serviceBuilder()//service 策略配置
.formatServiceFileName("%sService")//转换 service 接口文件名称,例如:UserLoginService
.formatServiceImplFileName("%sServiceImpl")//转换 service 实现类文件名称,例如:UserLoginServiceImpl
***mapper策略配置***:
/** mapper 策略配置 */
.mapperBuilder()//mapper 策略配置
.superClass(BaseMapper.class)//设置父类,BaseMapper是com.baomidou.mybatisplus.core.mapper中的
.enableMapperAnnotation()//开启 @Mapper 注解,默认值:false
.enableBaseResultMap()//启用 BaseResultMap 生成,默认值:false
.enableBaseColumnList()//启用 BaseColumnList,默认值:false
.formatMapperFileName("%sMapper")//转换 mapper 接口文件名称后缀,mapper目录下的,例如:UserLoginMapper(有@Mapper)
.formatXmlFileName("%sMapper")//转换 xml 文件名称后缀,例如:UserLoginMapper.xml,Mybatis的xml映射文件
.build()//加入构建队列
***自动生成模板引擎***:
/**
* 模板引擎
*/
//Velocity
//.templateEngine(new VelocityTemplateEngine())
//Beetl
//.templateEngine(new BeetlTemplateEngine())
//Freemarker
.templateEngine(new FreemarkerTemplateEngine())
/**
* 开始自动生成代码,执行队列构建操作
*/
.execute();
说明:模板引擎,默认Velocity方式,Beetl和Freemaker方式需要按如上方式进行设置,这三种方式都需要在pom.xml文件中添加对应依赖,这里有点关键点,就是所选依赖版本,必须与mybatis-plus-generator中的版本一致,不然会在运行自动生成时报错。
本人使用的 mybatis-plus-generator中的版本:
本人的pom.xml中引入的模板引擎依赖,亲测三种模板引擎方式都可以使用
(1)自动生成前项目工程目录如下:
(2)运行FastAutoGeneratorTest.java
(3)自动生成工程目录概况
——Mapper映射接口
/**
*
* 用户登录表 Mapper 接口
*
*
* @author ZSAndroid
* @since 2021-10-01
*/
@Mapper
public interface UserLoginMapper extends BaseMapper<UserLoginBean> {
}
超级无敌重点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SpringBoot启动类,必须扫描工程目录的mapper包,否则自定义SQL无效的Mybatis-plus功能无法启用。
——Service服务接口
/**
*
* 用户登录表 服务类
*
*
* @author ZSAndroid
* @since 2021-10-01
*/
public interface UserLoginService extends IService<UserLoginBean> {
}
——Service服务实现类
/**
*
* 用户登录表 服务实现类
*
*
* @author ZSAndroid
* @since 2021-10-01
*/
@Service
public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLoginBean> implements UserLoginService {
}
——entity实体Bean类
/**
*
* 用户登录表
*
*
* @author ZSAndroid
* @since 2021-10-01
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_user_login")
@ApiModel(value = "UserLoginBean对象", description = "用户登录表")
public class UserLoginBean extends Model<UserLoginBean> {
@ApiModelProperty("登录自增ID")
@TableId(value = "ul_id", type = IdType.AUTO)
private Integer ulId;
@ApiModelProperty("登录名")
@TableField("ul_username")
private String ulUsername;
@ApiModelProperty("登录密码")
@TableField("ul_password")
private String ulPassword;
//自动生成的pkVal()可以删除
@Override
public Serializable pkVal() {
return this.ulId;
}
}
——controller业务控制类Mapper.xml
/**
*
* 用户登录表 前端控制器
*
*
* @author ZSAndroid
* @since 2021-10-01
*/
@RestController
@RequestMapping("/user-login-bean")
public class UserLoginController {
}
——Mapper.xml(UserLoginMapper.xml)
xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.example.mapper.UserLoginMapper">
<resultMap id="BaseResultMap" type="com.example.entity.UserLoginBean">
<id column="ul_id" property="ulId" />
<result column="ul_username" property="ulUsername" />
<result column="ul_password" property="ulPassword" />
resultMap>
<sql id="Base_Column_List">
ul_id, ul_username, ul_password
sql>
mapper>
重点注意:自动生成的映射xml文件,需要在配置文件声明,本人习惯yml格式,下面贴出我的配置样式
# SpringBoot资源配置
spring:
datasource:
name: testdb #数据库名
url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC #url
username: xxx #用户名
password: xxx #密码
driver-class-name: com.mysql.cj.jdbc.Driver #数据库链接驱动
# 启动默认端口
server:
port: 8085
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml # 根据项目工程更改
type-aliases-package: com.example.entity #根据项目工程更改
configuration:
cache-enabled: false
map-underscore-to-camel-case: true
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # mybatis打印日志
global-config:
# 逻辑删除配置
db-config:
#id-type: AUTO
# 删除前
logic-not-delete-value: 1
# 删除后
logic-delete-value: 0
(4)到这里所有的准备工程已完成,下面测试自动生成代码自带的CRUD能否获取MySQL数据库的用户表信息。
(1) 写个简单的接口测试数据:
@RestController
@RequestMapping("/user-login-bean")
public class UserLoginController {
/** 常规写法:Spring容器中查询对应类型的bean,然后根据名称来查找资源 */
@Autowired
UserLoginService userLoginService;
//浏览器访问 http://localhost:8085/user-login-bean/getUserById
@RequestMapping("/getUserById")
public UserLoginBean getUserById(){
//getById是mybatisplus封装好的,通过ID值,查找映射表中的信息
return userLoginService.getById(1);
}
}
(2) 运行SpringBoot工程:
(3) 浏览器URL地址栏键入:http://localhost:8085/user-login-bean/getUserById
***获取MySQL的用户表信息成功***
上面测试的是MyBatis-Plus代码自动生成的测试,显然单表的CRUD不符合我们的开发需求,那下面演示一下,在Mapper.xml映射文件中,自定义SQL语句,然后通过Bean、Mapper、Service、Controller、是否能成功查询用户登录表信息,废话不多说,开始!
(1)UserLoginMapper.xml,增添findAllUser内容:
xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.example.mapper.UserLoginMapper">
<resultMap id="BaseResultMap" type="com.example.entity.UserLoginBean">
<id column="ul_id" property="ulId" />
<result column="ul_username" property="ulUsername" />
<result column="ul_password" property="ulPassword" />
resultMap>
<sql id="Base_Column_List">
ul_id, ul_username, ul_password
sql>
<select id="findAllUser" resultType="com.example.entity.UserLoginBean">
select * from t_user_login
select>
mapper>
(2)UserLoginMapper接口,增添findAllUser内容
@Mapper
public interface UserLoginMapper extends BaseMapper<UserLoginBean> {
List findAllUser() ;
}
(3)UserLoginService接口,增添findAllUser内容
public interface UserLoginService extends IService<UserLoginBean> {
List findAllUser() ;
}
(4)UserLoginServiceImpl服务实现类,注入Mapper的findAllUser()方法
@Service
public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLoginBean> implements UserLoginService {
@Autowired
UserLoginMapper userLoginMapper;
@Override
public List findAllUser() {
return userLoginMapper.findAllUser();
}
}
(5)UserLoginService接口,增添findAllUser内容
@RestController
@RequestMapping("/user-login-bean")
public class UserLoginController {
/** 常规写法:Spring容器中查询对应类型的bean,然后根据名称来查找资源 */
@Autowired
UserLoginService userLoginService;
//浏览器访问 http://localhost:8085/user-login-bean/getUserById
@RequestMapping("/getUserById")
public UserLoginBean getUserById(){
//getById是mybatisplus封装好的,通过ID值,查找映射表中的信息
return userLoginService.getById(1);
}
//浏览器访问 http://localhost:8085/user-login-bean/findAllUser
@RequestMapping("/findAllUser")
public List findAllUser() {
//findAllUser() 是自定义的SQL查询映射方法——查询t_user_login表中全部用户信息
return userLoginService.findAllUser();
}
}
(6)重新运行SpringBoot工程项目,浏览器URL键入:http://localhost:8085/user-login-bean/findAllUser
***获取MySQL的用户表全部信息成功***
回忆一下,我们是不是在pom.xml文件引入了Swagger2和它的ui的依赖,还有在全局配置中开启了Swagger的自动文档生成的方法
——“.enableSwagger() //开启 swagger 模式,默认值:false”
——pom.xml
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger2artifactId>
<version>2.9.2version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger-uiartifactId>
<version>2.9.2version>
dependency>
如果不引入Swagger2依赖,当你运行项目后,会在entity中的UserLoginBean,发现报错如下,解决方法,添加以上两个依赖
重点:你以为添加了依赖就行了?这里还需要Swagger2配置类,才能访问接口文档首页,代码如下:在工程目录config/中
新建Swagger2Config.java配置类:
/**
* created by on 2021/10/3
* 描述:Swagger接口文档配置类+添加摘要信息
*
* @author ZSAndroid
* @create 2021-10-3-11:08
*/
@Configuration //标记配置类
@EnableSwagger2 //是springfox提供的一个注解,代表swagger2相关技术开启,会扫描当前类所在包,及子包中所有的类型中的注解。做swagger文档的定值。
public class Swagger2Config {
@Bean
public Docket buildDocket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInf())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example")) //这里必须与包名一致,否则报错
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInf(){
return new ApiInfoBuilder()
.title("API文档标题")
.description("API文档说明概述")
.termsOfServiceUrl("https://blog.csdn.net/qq_39038178")
.contact(new Contact("CSDN博客主页", "https://blog.csdn.net/qq_39038178", null))
.build();
}
}
浏览器访问Swagger2文档首页:http://localhost:8085/swagger-ui.html
/**
*
* 快速生成
*
*
* @author ZSAndroid
* @create 2021-10-1-10:08
*/
public class FastAutoGeneratorTest {
/**
* 数据源配置
*/
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:mysql://localhost:3306/testdb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "root")
.dbQuery(new MySqlQuery()) //数据库查询
.schema("mybatis-plus") //数据库schema(部分数据库适用)
.typeConvert(new MySqlTypeConvert()) //数据库类型转换器
.keyWordsHandler(new MySqlKeyWordsHandler()); //数据库关键字处理器
/**
* 执行 run
*/
public static void main(String[] args) {
// "C://Users//ZSAndroid//Desktop//mybatisDemo//src//main//java"
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置
.globalConfig((scanner, builder) -> builder
.fileOverride() //覆盖已生成文件,默认值:false
.outputDir(System.getProperty("user.dir") + "/src/main/java") //指定输出目录,默认值: windows:D://
.author(scanner.apply("请输入开发者名称:"))//作者名,baomidou 默认值:作者
.dateType(DateType.TIME_PACK)//时间策略,DateType.ONLY_DATE 默认值: DateType.TIME_PACK
.commentDate("yyyy-MM-dd")//注释日期,默认值: yyyy-MM-dd
//.disableOpenDir()// 禁止打开输出目录,默认值:true
//.enableKotlin() //开启 kotlin 模式,默认值:false
.enableSwagger() //开启 swagger 模式,默认值:false
.build()//加入构建队列
)
// 包配置
.packageConfig((scanner, builder) -> builder
.parent(scanner.apply("请输入包名:"))//父包名,默认值:com.baomidou
//.moduleName("sys")//父包模块名,默认值:无
.entity("entity")//Entity 包名,默认值:entity
.service("service")//Service 包名,默认值:service
.serviceImpl("service.impl")//Service Impl 包名,默认值:service.impl
.mapper("mapper")//Mapper 包名,默认值:mapper
.xml("mapper.xml")//Mapper XML 包名,默认值:mapper.xml
.controller("controller")//Controller 包名,默认值:controller
//.other("other")//自定义文件包名, 输出自定义文件时所用到的包名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "src/main/resources/mapper")) //路径配置信息,Collections.singletonMap(OutputFile.mapperXml, "D://")
.build()//加入构建队列
)
//模板配置
.templateConfig((scanner, builder) -> builder
//.disable()//禁用所有模板
//.entityKt("/templates/entity.java")// 设置实体模板路径(kotlin),/templates/entity.java
.disable(TemplateType.ENTITY)//禁用模板 TemplateType.ENTITY
.entity("/templates/entity.java") //设置实体模板路径(JAVA),/templates/entity.java
.service("/templates/service.java")//设置 service 模板路径,/templates/service.java
.serviceImpl("/templates/serviceImpl.java")//设置 serviceImpl 模板路径,/templates/serviceImpl.java
.mapper("/templates/mapper.java")//设置 mapper 模板路径,/templates/mapper.java
.mapperXml("/templates/mapper.xml")//设置 mapperXml 模板路径,/templates/mapper.xml
.controller("/templates/controller.java")//设置 controller 模板路径,/templates/controller.java
.build()//加入构建队列
)
//注入配置————自定义模板
.injectionConfig(builder -> builder
.beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
}) //输出文件之前消费者
.customMap(Collections.singletonMap("my_field", "你好!这是我自己注入的属性哦")) //自定义配置 Map 对象
//.customFile(Collections.singletonMap("test.txt", "/templates/test.vm")) //自定义配置模板文件
.build()//加入构建队列
)
// 策略配置
/**
* schema:在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。
* 一般情况下一个用户对应一个集合,所以为了区分不同的集合就需要给不同的集合起名字。
* 用户的schema名就相当于用户名,并作为该用户缺省schema。所以说schema集合看上去像用户名。
* 例如当我们访问一个数据表时,如果该表没有指明属于哪个schema,系统就会自动的加上缺省的schema。
*/
.strategyConfig(builder -> builder
/** 基本参数配置 */
.enableCapitalMode()//开启大写命名,默认值:false
.enableSkipView()//开启跳过视图,默认值:false
.disableSqlFilter()//禁用 sql 过滤,默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
.likeTable(new LikeTable("t_user_login"))//模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
/** 设置需要生成的表名 */
.addInclude("t_user_login")// 增加表匹配(内存过滤),include 与 exclude 只能配置一项
/** 前缀配置*/
.addTablePrefix("t_")//增加过滤表前缀
//.addFieldSuffix("_")//增加过滤表后缀
//.addFieldPrefix("ul_")//增加过滤字段前缀 本人不建议使用,去掉后缀,会导致驼峰命名实体类的变量名不带前缀,去掉后,错误:Username,正确:ulUsername
//.addFieldSuffix("_")//增加过滤字段后缀
/** 实体策略配置 */
.entityBuilder()//实体策略配置
.disableSerialVersionUID()//禁用生成 serialVersionUID,默认值:true
.enableLombok()//开启 lombok 模型,默认值:false
.enableChainModel()//开启链式模型,默认值:false
.enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀,默认值:false
.enableTableFieldAnnotation()//开启生成实体时生成字段注解,默认值:false
.enableActiveRecord()//开启 ActiveRecord 模型,默认值:false
.naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略,默认下划线转驼峰命名:NamingStrategy.underline_to_camel
.columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体属性的命名策略,默认为 null,未指定按照 naming 执行
.idType(IdType.AUTO)//全局主键类型
.formatFileName("%sBean")//格式化文件名称,生成实体的后缀,建议这样使用,生成后:UserLoginBean
//.superClass(BaseEntity.class)//设置父类
//.enableColumnConstant()//开启生成字段常量,默认值:false
//.addIgnoreColumns("age")//添加忽略字段
//.nameConvert(INameConvert)//名称转换实现
//.versionColumnName("version")//乐观锁字段名(数据库)
//.versionPropertyName("version")//乐观锁属性名(实体)
//.logicDeleteColumnName("deleted")//逻辑删除字段名(数据库)
//.logicDeletePropertyName("deleteFlag")//逻辑删除属性名(实体)
//.enableSchema()//启用 schema,默认值:false,多 schema 场景的时候打开
//.addExclude("t_simple")//增加表排除匹配(内存过滤),include 与 exclude 只能配置一项
//.notLikeTable(new LikeTable("USER"))//模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
/** controller 策略配置 */
.controllerBuilder()//controller 策略配置
.enableHyphenStyle()//开启驼峰转连字符,默认值:false
.enableRestStyle()//开启生成@RestController 控制器,默认值:false
.formatFileName("%sController")//格式化文件名称——controller包下自动生成的类后缀,例如UserLoginController
/** Service 策略配置 */
.serviceBuilder()//service 策略配置
.formatServiceFileName("%sService")//转换 service 接口文件名称,例如:UserLoginService
.formatServiceImplFileName("%sServiceImpl")//转换 service 实现类文件名称,例如:UserLoginServiceImpl
/** mapper 策略配置 */
.mapperBuilder()//mapper 策略配置
.superClass(BaseMapper.class)//设置父类,BaseMapper是com.baomidou.mybatisplus.core.mapper中的
.enableMapperAnnotation()//开启 @Mapper 注解,默认值:false
.enableBaseResultMap()//启用 BaseResultMap 生成,默认值:false
.enableBaseColumnList()//启用 BaseColumnList,默认值:false
.formatMapperFileName("%sMapper")//转换 mapper 接口文件名称后缀,mapper目录下的,例如:UserLoginMapper(有@Mapper)
.formatXmlFileName("%sMapper")//转换 xml 文件名称后缀,例如:UserLoginMapper.xml,Mybatis的xml映射文件
.build()//加入构建队列
)
/**
* 模板引擎
*/
//Velocity
//.templateEngine(new VelocityTemplateEngine())
//Beetl
//.templateEngine(new BeetlTemplateEngine())
//Freemarker
.templateEngine(new FreemarkerTemplateEngine())
/**
* 开始自动生成代码,执行队列构建操作
*/
.execute();
}
}
仅自己学习记录,如有错误,敬请谅解~,谢谢~~~