快速入门
引入依赖
<!-- 添加 代码生成器 依赖,这里的版本最好和mybatis的一样-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 模板引擎
MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,
如果都不满足您的要求,可以采用自定义模板引擎。 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
写main方法
public class GenerateCode {
public static void main(String[] args) {
// 代码生成器
// 3.5.0的版本是这样的,private AutoGenerator() {},和官方教程不一样
AutoGenerator mpg = new AutoGenerator();
/**************************全局配置****************************************/
// 全局配置,要导这个包的:import com.baomidou.mybatisplus.generator.config.GlobalConfig;
// 3.5.0的版本是这样的,private GlobalConfig() {},和官方教程不一样
GlobalConfig gc = new GlobalConfig();
// projectPath:获取当前项目路径:
//D:\workplace\LearnCode\mybatisPlus\MyMybatisPlusdemo
//System.out.println(System.getProperty("user.dir"));
String projectPath = System.getProperty("user.dir");
// 设置生成路径
gc.setOutputDir(projectPath + "/src/main/java");
// 设置作者
gc.setAuthor("Jerry");
// 设置代码生成后是否需要打开文件
gc.setOpen(false);
// 实体属性 Swagger2 注解
// gc.setSwagger2(true);
// 生成xml的ResultMap:映射所有的字段
gc.setBaseResultMap(true);
// 生成xml的通用查询结果列
gc.setBaseColumnList(true);
// 第二次生成同名文件是覆盖还是累加
gc.setFileOverride(true);
//描述:时间类型对应策略。默认值:TIME_PACK
// gc.setDateType(DateType.ONLY_DATE);
//描述:实体命名方式,%s 为占位符。 默认值:null (驼峰命名)
//示例:%sEntity 生成 UserEntity
gc.setEntityName("%s");
//描述:Mapper 命名方式,%s 为占位符。默认值:null
//示例:%sDao 生成 UserDao
gc.setMapperName("%sMapper");
//描述:Mapper XML 命名方式,%s 为占位符。 默认值:null
//示例:%sDao 生成 UserDao.xml
gc.setXmlName("%sMapper");
//描述:Service 命名方式,%s 为占位符。 默认值:null
//示例:%sBusiness 生成 UserBusiness
gc.setServiceName("%sService");
//描述:Service impl 命名方式,%s 为占位符。 默认值:null
//示例:%sBusinessImpl 生成 UserBusinessImpl
gc.setServiceImplName("%sServiceImpl");
// 将全局配置放入 AutoGenerator 中
mpg.setGlobalConfig(gc);
/**************************全局配置****************************************/
/**************************数据源配置****************************************/
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://192.168.124.188:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1234");
// 将数据源配置放入 AutoGenerator 中
mpg.setDataSource(dsc);
/**************************数据源配置****************************************/
/**************************包配置****************************************/
PackageConfig pc = new PackageConfig();
// 设置模块名:
pc.setModuleName("mymybatisplusdemo");
// 设置包名
pc.setParent("com.lin");
//完整路径:com.lin.mymybatisplusdemo
// 将 包配置 放入 AutoGenerator 中
mpg.setPackageInfo(pc);
/**************************包配置****************************************/
/**************************策略配置****************************************/
StrategyConfig strategy = new StrategyConfig();
// 表名的生成策略:下划线转驼峰
strategy.setNaming(NamingStrategy.underline_to_camel);
// 列名的生成策略:下划线转驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
//实体类是否支持lombok
strategy.setEntityLombokModel(true);
// 是否使用@RestController的注解
strategy.setRestControllerStyle(true);
// 公共父类
//strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
//strategy.setSuperEntityColumns("id");
// 要生成的表名,多个表用逗号分开,如"t_user","t_person"
strategy.setInclude("t_user","t_person","t_person_student");
// 也可以按照表前缀生成相关内容:如生成前缀为t_的表的内容
// strategy.setLikeTable(new LikeTable("t_"));
// 描述:驼峰转连字符。
// 比如 如果设置了true,对于t_person_student表,
// 生成的controller @RequestMapping("/mymybatisplusdemo/person-student")
// t_去除了是因为设置了 strategy.setTablePrefix("t_");
// mymybatisplusdemo 这个值=pc.setModuleName("mymybatisplusdemo");
//strategy.setControllerMappingHyphenStyle(true);
//去掉表前缀:对于t_user, 如果不配置,会生成TUser的类,配置之后变成User类
strategy.setTablePrefix("t_");
// 将 策略配置 放入 AutoGenerator 中
mpg.setStrategy(strategy);
/**************************策略配置****************************************/
/**************************模版引擎****************************************/
// 这里我们使用默认的模版引擎,所以可以先注释掉
//mpg.setTemplateEngine(new FreemarkerTemplateEngine());
/**************************模版引擎****************************************/
// 开始执行
mpg.execute();
}
}

上面对xml有作用的两个配置
gc.setBaseResultMap(true);
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.lin.mymybatisplusdemo.entity.User">
<id column="uid" property="uid" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="email" property="email" />
<result column="is_deleted" property="isDeleted" />
</resultMap>
gc.setBaseColumnList(true);
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
uid, name, age, email, is_deleted
</sql>
更多内容可以参考官方文档
修改xml存放路径
/**************************自定义配置****************************************/
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
// projectPath=当前项目路径=D:\workplace\LearnCode\mybatisPlus\MyMybatisPlusdemo
// pc.getModuleName()=pc.setModuleName("mymybatisplusdemo");
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
// 将自定义的输出配置focList 放入到自定义配置中
cfg.setFileOutConfigList(focList);
// 将自定义配置放入 代码生成器 中
mpg.setCfg(cfg);
/**************************自定义配置****************************************/
模版引擎可以在下面找到:

xml在Resource里面了,但xml也还在Java里面

通过配置模版,就可以去掉Java包下的xml
/**************************配置模版****************************************/
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);// 这里设置null,就可以控制xml不在Java包下生成
mpg.setTemplate(templateConfig);
/**************************配置模版****************************************/

改成3.5以上的代码风格
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.9</version>
</dependency>
上面的代码变为
public class GenerateCode {
public static void main(String[] args) {
FastAutoGenerator
/**************************数据源配置****************************************/
.create("jdbc:mysql://192.168.124.188:3306/mybatis_plus",
"root", "1234")
/**************************全局配置****************************************/
.globalConfig(builder -> builder
.author("Jerry")// 设置作者名
.outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")// 设置输出目录
.disableOpenDir()// 不允许自动打开输出目录
.dateType(DateType.ONLY_DATE)// 设置时间类型策略
.commentDate("yyyy-MM-dd") // 设置注释日期格式
.build())
.packageConfig(builder -> builder
.parent("com.lin") // 设置父包名
.moduleName("mymybatisplusdemo") // 设置父包模块名
.entity("entity") // 设置 Entity 包名
.service("service") // 设置 Service 包名
.serviceImpl("service.impl") // 设置 Service Impl 包名
.mapper("mapper") // 设置 Mapper 包名
//.xml("MapperXml") // 设置 Mapper XML 包名, 如果没有pathInfo这个配置,此处就会生效
.controller("controller") // 设置 Controller 包名
// 设置路径配置信息: 单独设置xml文件的路径
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"))
.build())
/**************************策略配置****************************************/
.strategyConfig(builder -> builder
.enableCapitalMode()// 开启大写命名
.enableSkipView() // 开启跳过视图
.disableSqlFilter() // 禁用 SQL 过滤
//.likeTable(new LikeTable("USER")) // 模糊匹配表名
.addInclude("t_user","t_person","t_person_student") // 增加表匹配
.addTablePrefix("t_") // 增加过滤表前缀
//.addFieldSuffix("_flag") // 增加过滤字段后缀
/***************Entity 策略配置**********************/
.entityBuilder()//设置实体类模板
.logicDeleteColumnName("is_Deleted") //逻辑删除字段名(数据库字段)
.enableFileOverride()//覆盖已生成文件
.enableLombok()//开启 Lombok 模型
/***************模板配置 (TemplateConfig)**********************/
//.javaTemplate("/templates/entity.java") // 设置 Java 实体模板(自定义模版)
///.mapperBuilder()
//.mapperXmlTemplate("/templates/mapper.xml.vm")// 这里主要放的是自定义的模版
//.disable() // 禁用实体类生成(自定义模版)
//.serviceBuilder() //设置 Service 层模板(自定义模版)
//.disableService() // 禁用 Service 层生成(自定义模版)
//.serviceTemplate("/templates/service.java") // 设置 Service 模板(自定义模版)
//.serviceImplTemplate("/templates/serviceImpl.java") // 设置 ServiceImpl 模板(自定义模版)
/***************Controller 策略配置**********************/
.controllerBuilder()
.enableRestStyle()//开启生成@RestController 控制器
.enableFileOverride()//覆盖已生成文件
/***************Service 策略配置**********************/
.serviceBuilder()
.enableFileOverride()//覆盖已生成文件
.formatServiceFileName("%sService")//格式化 Service 接口文件名称
.formatServiceImplFileName("%sServiceImpl")//格式化 Service 实现类文件名称
/***************Mapper 策略配置**********************/
/*Mapper 策略配置用于定制 Mapper 接口和对应的 XML 映射文件的生成规则,
包括父类、文件覆盖、Mapper 注解、结果映射、列列表、缓存实现类等。*/
.mapperBuilder()
.superClass(BaseMapper.class)// 设置父类
.enableBaseResultMap() // 启用 BaseResultMap 生成
.enableBaseColumnList()// 启用 BaseColumnList
.formatMapperFileName("%sMapper")//格式化 Mapper 文件名称
.formatXmlFileName("%sXml")//格式化 XML 实现类文件名称
.build())
.execute();
}
}
关于模版引擎"/templates/mapper.xml.vm"
:位置是在mybatis-plus-generator-3.5.9.jar
的包下
自定义xml模版
模版的的编写:语法是velocity的语法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
#if(${enableCache})
<!-- 开启二级缓存 -->
<cache type="${cacheClassName}"/>
#end
#if(${baseResultMap})
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
#foreach($field in ${table.fields})
#if(${field.keyFlag})##生成主键排在第一位
<id column="${field.name}" property="${field.propertyName}" />
#end
#end
#foreach($field in ${table.commonFields})##生成公共字段
<result column="${field.name}" property="${field.propertyName}" />
#end
#foreach($field in ${table.fields})
#if(!${field.keyFlag})##生成普通字段
<result column="${field.name}" property="${field.propertyName}" />
#end
#end
</resultMap>
#end
#if(${baseColumnList})
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
#foreach($field in ${table.commonFields})
${field.columnName},
#end
${table.fieldNames}
</sql>
#end
<!-- 普通插入语句 -->
<insert id="insert">
INSERT INTO ${table.name}
<trim prefix="(" suffix=")" suffixOverrides=",">
#foreach($field in ${table.fields})
#if(${field.keyFlag})##生成主键排在第一位
<if test="${field.propertyName} != null"> ${field.name},</if>
#end
#end
#foreach($field in ${table.commonFields})##生成公共字段
<if test="${field.propertyName} != null"> ${field.name},</if>
#end
#foreach($field in ${table.fields})
#if(!${field.keyFlag})##生成普通字段
<if test="${field.propertyName} != null"> ${field.name},</if>
#end
#end
</trim>
<trim prefix="VALUES(" suffix=")" suffixOverrides=",">
#foreach($field in ${table.fields})
#if(${field.keyFlag})##生成主键排在第一位
<if test="${field.propertyName} != null"> #{${field.propertyName}},</if>
#end
#end
#foreach($field in ${table.commonFields})##生成公共字段
<if test="${field.propertyName} != null"> #{${field.propertyName}},</if>
#end
#foreach($field in ${table.fields})
#if(!${field.keyFlag})##生成普通字段
<if test="${field.propertyName} != null"> #{${field.propertyName}},</if>
#end
#end
</trim>
</insert>
</mapper>
自定义模版的放置路径:src/main/resources/templates/mymapper.xml.vm
自定义模版的配置:
.strategyConfig(builder -> builder
.mapperBuilder()
.mapperXmlTemplate("/templates/mymapper.xml.vm")//路径
自定义模版生成xml的效果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lin.mymybatisplusdemo.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.lin.mymybatisplusdemo.entity.User">
<id column="uid" property="uid" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="email" property="email" />
<result column="is_deleted" property="isDeleted" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
uid, name, age, email, is_deleted
</sql>
<!-- 普通插入语句 -->
<insert id="insert">
INSERT INTO t_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uid != null"> uid,</if>
<if test="name != null"> name,</if>
<if test="age != null"> age,</if>
<if test="email != null"> email,</if>
<if test="isDeleted != null"> is_deleted,</if>
</trim>
<trim prefix="VALUES(" suffix=")" suffixOverrides=",">
<if test="uid != null"> #{uid},</if>
<if test="name != null"> #{name},</if>
<if test="age != null"> #{age},</if>
<if test="email != null"> #{email},</if>
<if test="isDeleted != null"> #{isDeleted},</if>
</trim>
</insert>
</mapper>
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com