MybatisPlus 使用

mybatis-plus-boot-starter 3.5.1

MybatisPlus

统一映射接口

BaseMapper.class

主键策略

ID生成器

public enum IdType {
    AUTO(0), 数据库自增id
    NONE(1), 未设置主键
    INPUT(2), 手动输入
    ASSIGN_ID(3),  分配id
    ASSIGN_UUID(4);  分配id工具

数据加密

新代码生成器

# 数据库配置(DataSourceConfig)

# 基础配置

属性 说明 示例
url jdbc 路径 jdbc:mysql://127.0.0.1:3306/mybatis-plus
username 数据库账号 root
password 数据库密码 123456
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .build();

# 可选配置

方法 说明 示例
dbQuery(IDbQuery) 数据库查询 new MySqlQuery()
schema(String) 数据库 schema(部分数据库适用) mybatis-plus
typeConvert(ITypeConvert) 数据库类型转换器 new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler) 数据库关键字处理器 new MySqlKeyWordsHandler()
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .dbQuery(new MySqlQuery())
    .schema("mybatis-plus")
    .typeConvert(new MySqlTypeConvert())
    .keyWordsHandler(new MySqlKeyWordsHandler())
    .build();

# 全局配置(GlobalConfig)

方法 说明 示例
fileOverride 覆盖已生成文件 默认值:false
disableOpenDir 禁止打开输出目录 默认值:true
outputDir(String) 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String) 作者名 baomidou 默认值:作者
enableKotlin 开启 kotlin 模式 默认值:false
enableSwagger 开启 swagger 模式 默认值:false
dateType(DateType) 时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
commentDate(String) 注释日期 默认值: yyyy-MM-dd
new GlobalConfig.Builder()
    .fileOverride()
    .outputDir("/opt/baomidou")
    .author("baomidou")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();

# 包配置(PackageConfig)

方法 说明 示例
parent(String) 父包名 默认值:com.baomidou
moduleName(String) 父包模块名 默认值:无
entity(String) Entity 包名 默认值:entity
service(String) Service 包名 默认值:service
serviceImpl(String) Service Impl 包名 默认值:service.impl
mapper(String) Mapper 包名 默认值:mapper
mapperXml(String) Mapper XML 包名 默认值:mapper.xml
controller(String) Controller 包名 默认值:controller
other(String) 自定义文件包名 输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>) 路径配置信息 Collections.singletonMap(OutputFile.mapperXml, "D://")
new PackageConfig.Builder()
    .parent("com.baomidou.mybatisplus.samples.generator")
    .moduleName("sys")
    .entity("po")
    .service("service")
    .serviceImpl("service.impl")
    .mapper("mapper")
    .mapperXml("mapper.xml")
    .controller("controller")
    .other("other")
    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
    .build();

# 模板配置(TemplateConfig)

方法 说明 示例
disable 禁用所有模板
disable(TemplateType...) 禁用模板 TemplateType.ENTITY
entity(String) 设置实体模板路径(JAVA) /templates/entity.java
entityKt(String) 设置实体模板路径(kotlin) /templates/entity.java
service(String) 设置 service 模板路径 /templates/service.java
serviceImpl(String) 设置 serviceImpl 模板路径 /templates/serviceImpl.java
mapper(String) 设置 mapper 模板路径 /templates/mapper.java
mapperXml(String) 设置 mapperXml 模板路径 /templates/mapper.xml
controller(String) 设置 controller 模板路径 /templates/controller.java
new TemplateConfig.Builder()
    .disable(TemplateType.ENTITY)
    .entity("/templates/entity.java")
    .service("/templates/service.java")
    .serviceImpl("/templates/serviceImpl.java")
    .mapper("/templates/mapper.java")
    .mapperXml("/templates/mapper.xml")
    .controller("/templates/controller.java")
    .build();

# 注入配置(InjectionConfig)

方法 说明 示例
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>) 输出文件之前消费者
customMap(Map<String, Object>) 自定义配置 Map 对象 Collections.singletonMap("test", "baomidou")
customFile(Map<String, String>) 自定义配置模板文件 Collections.singletonMap("test.txt", "/templates/test.vm")
new InjectionConfig.Builder()
    .beforeOutputFile((tableInfo, objectMap) -> {
        System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
    })
    .customMap(Collections.singletonMap("test", "baomidou"))
    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    .build();

# 策略配置(StrategyConfig)

方法 说明 示例
enableCapitalMode 开启大写命名 默认值:false
enableSkipView 开启跳过视图 默认值:false
disableSqlFilter 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema 启用 schema 默认值:false,多 schema 场景的时候打开
likeTable(LikeTable) 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable) 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
addInclude(String...) 增加表匹配(内存过滤) include 与 exclude 只能配置一项
addExclude(String...) 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项
addTablePrefix(String...) 增加过滤表前缀
addTableSuffix(String...) 增加过滤表后缀
addFieldPrefix(String...) 增加过滤字段前缀
addFieldSuffix(String...) 增加过滤字段后缀
entityBuilder 实体策略配置
controllerBuilder controller 策略配置
mapperBuilder mapper 策略配置
serviceBuilder service 策略配置
new StrategyConfig.Builder()
    .enableCapitalMode()
    .enableSkipView()
    .disableSqlFilter()
    .likeTable(new LikeTable("USER"))
    .addInclude("t_simple")
    .addTablePrefix("t_", "c_")
    .addFieldSuffix("_flag")
    .build();

# Entity 策略配置

方法 说明 示例
nameConvert(INameConvert) 名称转换实现
superClass(Class<?>) 设置父类 BaseEntity.class
superClass(String) 设置父类 com.baomidou.global.BaseEntity
disableSerialVersionUID 禁用生成 serialVersionUID 默认值:true
enableColumnConstant 开启生成字段常量 默认值:false
enableChainModel 开启链式模型 默认值:false
enableLombok 开启 lombok 模型 默认值:false
enableRemoveIsPrefix 开启 Boolean 类型字段移除 is 前缀 默认值:false
enableTableFieldAnnotation 开启生成实体时生成字段注解 默认值:false
enableActiveRecord 开启 ActiveRecord 模型 默认值:false
versionColumnName(String) 乐观锁字段名(数据库)
versionPropertyName(String) 乐观锁属性名(实体)
logicDeleteColumnName(String) 逻辑删除字段名(数据库)
logicDeletePropertyName(String) 逻辑删除属性名(实体)
naming 数据库表映射到实体的命名策略 默认下划线转驼峰命名:NamingStrategy.underline_to_camel
columnNaming 数据库表字段映射到实体的命名策略 默认为 null,未指定按照 naming 执行
addSuperEntityColumns(String...) 添加父类公共字段
addIgnoreColumns(String...) 添加忽略字段
addTableFills(IFill...) 添加表字段填充
addTableFills(List) 添加表字段填充
idType(IdType) 全局主键类型
convertFileName(ConverterFileName) 转换文件名称
formatFileName(String) 格式化文件名称
new StrategyConfig.Builder()
    .entityBuilder()
    .superClass(BaseEntity.class)
    .disableSerialVersionUID()
    .enableChainModel()
    .enableLombok()
    .enableRemoveIsPrefix()
    .enableTableFieldAnnotation()
    .enableActiveRecord()
    .versionColumnName("version")
    .versionPropertyName("version")
    .logicDeleteColumnName("deleted")
    .logicDeletePropertyName("deleteFlag")
    .naming(NamingStrategy.no_change)
    .columnNaming(NamingStrategy.underline_to_camel)
    .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
    .addIgnoreColumns("age")
    .addTableFills(new Column("create_time", FieldFill.INSERT))
    .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
    .idType(IdType.AUTO)
    .formatFileName("%sEntity")
    .build();

# Controller 策略配置

方法 说明 示例
superClass(Class<?>) 设置父类 BaseController.class
superClass(String) 设置父类 com.baomidou.global.BaseController
enableHyphenStyle 开启驼峰转连字符 默认值:false
enableRestStyle 开启生成@RestController 控制器 默认值:false
convertFileName(ConverterFileName) 转换文件名称
formatFileName(String) 格式化文件名称
new StrategyConfig.Builder()
    .controllerBuilder()
    .superClass(BaseController.class)
    .enableHyphenStyle()
    .enableRestStyle()
    .formatFileName("%sAction")
    .build();

# Service 策略配置

方法 说明 示例
superServiceClass(Class<?>) 设置 service 接口父类 BaseService.class
superServiceClass(String) 设置 service 接口父类 com.baomidou.global.BaseService
superServiceImplClass(Class<?>) 设置 service 实现类父类 BaseServiceImpl.class
superServiceImplClass(String) 设置 service 实现类父类 com.baomidou.global.BaseServiceImpl
convertServiceFileName(ConverterFileName) 转换 service 接口文件名称
convertServiceImplFileName(ConverterFileName) 转换 service 实现类文件名称
formatServiceFileName(String) 格式化 service 接口文件名称
formatServiceImplFileName(String) 格式化 service 实现类文件名称
new StrategyConfig.Builder()
    .serviceBuilder()
    .superServiceClass(BaseService.class)
    .superServiceImplClass(BaseServiceImpl.class)
    .formatServiceFileName("%sService")
    .formatServiceImplFileName("%sServiceImp")
    .build();

# Mapper 策略配置

方法 说明 示例
superClass(Class<?>) 设置父类 BaseMapper.class
superClass(String) 设置父类 com.baomidou.global.BaseMapper
enableMapperAnnotation 开启 @Mapper 注解 默认值:false
enableBaseResultMap 启用 BaseResultMap 生成 默认值:false
enableBaseColumnList 启用 BaseColumnList 默认值:false
cache(Class<? extends Cache>) 设置缓存实现类 MyMapperCache.class
convertMapperFileName(ConverterFileName) 转换 mapper 类文件名称
convertXmlFileName(ConverterFileName) 转换 xml 文件名称
formatMapperFileName(String) 格式化 mapper 文件名称
formatXmlFileName(String) 格式化 xml 实现类文件名称
new StrategyConfig.Builder()
    .mapperBuilder()
    .superClass(BaseMapper.class)
    .enableMapperAnnotation()
    .enableBaseResultMap()
    .enableBaseColumnList()
    .cache(MyMapperCache.class)
    .formatMapperFileName("%sDao")
    .formatXmlFileName("%sXml")
    .build();

使用方法codegenergtor代码构造示例

方式一

mybatis-plus3.5.0

**
 * @author  zzy
 * @create
 * @desc
 * @return
 *
 * 3.5.0之后的代码构建写发法
 * 先设置数据源构建
 * 1. DataSourceConfig.Builder
 *
 * 2.全局配置
 *          目录生成名,
 *          作者
 *          完成时是否打开文件夹
 *          实体属性Swagger2注解
 **/
@SuppressWarnings("all")
public class CodeGenerator {
	//数据源
    private final String URL="jdbc:mysql://localhost:3306/db_mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
    private final String USER_NAME = "root";
    private final String PASSWORD = "zhuangzeyong";
    //是否开启swagger
    private final Boolean ENALBESWAGGER = false;
    //生成路径配置
    private final String PACKEGER_NAME = "mybatisplus.mp.book";




    public  void main(String[] args) {


//1 构建数据源
        DataSourceConfig.Builder databuilder =
                new DataSourceConfig.Builder(
                        URL,USER_NAME,PASSWORD);

//2 全局配置
        GlobalConfig.Builder globalconfig = new GlobalConfig.Builder();
        //输出指定目录
        String property = System.getProperty("mp.dir");
        globalconfig.outputDir(property + "/src/main/java/mybatisplus/mp");
        //作者
        globalconfig.author("zzy");
        // 结束时是否打开文件夹
        globalconfig.openDir(true);
        // 实体属性Swagger2注解
        if (ENALBESWAGGER) {
            globalconfig.enableSwagger();
        }
        //时间策略
        globalconfig.dateType(DateType.TIME_PACK);
        //注释日期格式
        globalconfig.commentDate("yyy/mm/dd");



//3.生成包路径配置
        PackageConfig.Builder packegconfig = new PackageConfig.Builder();
        //项目路径生成
        packegconfig.parent(PACKEGER_NAME);
        packegconfig.entity("entity");
        packegconfig.mapper("mapper");


//4.策略生成
        StrategyConfig.Builder startegyconfig = new StrategyConfig.Builder();
        //目标数据库 表名
        startegyconfig.addInclude("book");
        //entity实体类生成配置
        startegyconfig
                .entityBuilder()
                .enableLombok() //开启lombok
                .enableTableFieldAnnotation() //生成时添加注解
                .idType(IdType.AUTO); //全局主键类型策略
        //mapper层生成配置
        startegyconfig.mapperBuilder()
                //继承业务逻辑接口
                .superClass(BaseMapper.class);
        //controller生成配置
        startegyconfig.controllerBuilder()
                .enableHyphenStyle()
                .enableRestStyle();


//5.代码构建生成器
        AutoGenerator autoGenerator = new AutoGenerator(databuilder.build());
        //数据源
        autoGenerator.getDataSource();
        //全局配置
        autoGenerator.getGlobalConfig();
        //包路径配置
        autoGenerator.getPackageInfo();
        //执行
        autoGenerator.execute();


    }

}

方式二(推荐)

mybatis-plus3.5.1

package mybatisplus.mp.codegenerator;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;
import java.util.Scanner;

public class CodeGen {
    //数据源
    private static final String USER_NAME = "root";
    private static final String PASSWORD = "zhuangzeyong";
    //生成目标路径
    private static final String PACKEGER_NAME = "src.main.java.mybatisplus.mp";


    //输入工具
    //输入模块名 , 表名
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");


    }
    
    //是否需要更换数据库
    //是 请输入数据库名  用户名 密码 表名

    public static void main(String[] args) {

        FastAutoGenerator.create(
                "jdbc:mysql://localhost:3306/"+scanner("数据库名")+"?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8",
                USER_NAME,
                PASSWORD)
                
                //全局配置
                .globalConfig(builder -> {
                    builder.author("zzy") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("F://mp"); // 指定输出目录
                })
                
                //包配置
                .packageConfig(builder -> {

                    builder.parent(PACKEGER_NAME) // 代码生成路标路径
                            .moduleName(scanner("模块名")) // 设置总的模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "F://mp")); // 设置该表的映射文件mapperXml生成路径
                })

                //策略配置
                .strategyConfig(builder -> {
                    builder
                            // 目标数据库mysql table表名 ---生成--- >java实体类
                            .addInclude(scanner("表名,多个英文逗号分割").split(","))
                            //添加过滤器
                            .addTablePrefix("tb_", "c_")
                            //-------------------可以默认不配,细节可自行配置--------------------------
                            //实体类配置
                            .entityBuilder()
                            //控制层配置
                            .controllerBuilder()
                            //事务层配置
                            .serviceBuilder()
                            //映射层配置
                            .mapperBuilder();
                    ; // 设置过滤表前缀
                })
                // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();


    }



}

上一篇:【原创】poj ----- 2524 Ubiquitous Religions 解题报告


下一篇:AutoFac的使用总结(未完)