一.使用XML进行配置(最简化,全量表结构)
使用xml不能使用模板引擎,只能使用它预设的三种生成类型,以下是xml最简写法,添加了自定义注释,没必要可以把那段配置删了
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 自定义注释-->
<plugin type="com.iquantex.pims.service.config.mysql.GeneratorPlugin">
<property name="author" value="zhanghy"/>
<property name="dateFormat" value="yyyy/MM/dd HH:mm"/>
</plugin>
<commentGenerator>
<!-- 是否去掉自动注释-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/pim"
userId="rr123"
password="123">
</jdbcConnection>
<!-- 生成DataObject类存放位置 -->
<javaModelGenerator targetPackage="com.iquantex.pims.service.myTest" targetProject="C:\Users\hzadmin\Desktop\pims-service\start\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成映射文件存放位置 -->
<!-- <sqlMapGenerator targetPackage="com.iquantex.pims.service.myTest.xml" targetProject="C:\Users\hzadmin\Desktop\pims-service\start\src\main\java">-->
<!-- <property name="enableSubPackages" value="true" />-->
<!-- </sqlMapGenerator>-->
<!-- 生成Dao类存放位置 -->
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件的代码
type="ANNOTATEDMAPPER",生成Java Model和基于注解的Mapper 对象
type="MIXEDMAPPER",生成基于注解的Java Model和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML 文件和独立的Mapper接口-->
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.iquantex.pims.service.myTest.mapper" targetProject="C:\Users\hzadmin\Desktop\pims-service\start\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="pims_%" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false">
</table>
</context>
</generatorConfiguration>
main
package com.iquantex.pims.service.config.mysql;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public static void main(String[] args) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<>();
// 如果已经存在生成过的文件是否进行覆盖
boolean overwrite = true;
File configFile = org.springframework.util.ResourceUtils.getFile("classpath:generator-config.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
}
}
自定义注释配置
package com.iquantex.pims.service.config.mysql;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.internal.util.StringUtility;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class GeneratorPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
String author = properties.getProperty("author");
String dateFormat = properties.getProperty("dateFormat");
// 添加import
topLevelClass.addImportedType("lombok.Data");
// 添加注解
SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat);
// 获取表注释
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine(" * @author: " + author);
topLevelClass.addJavaDocLine(" * @time: " + dateFormatter.format(new Date()));
if (StringUtility.stringHasValue(introspectedTable.getRemarks())) {
topLevelClass.addJavaDocLine(" * " + introspectedTable.getRemarks());
}
if(introspectedTable.hasPrimaryKeyColumns()){
topLevelClass.addImportedType("com.baomidou.mybatisplus.annotation.TableId");
}
topLevelClass.addJavaDocLine(" */");
topLevelClass.addAnnotation("@Data");
return true;
}
@Override
public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
if (StringUtility.stringHasValue(introspectedColumn.getRemarks())) {
field.addJavaDocLine("/**");
field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
field.addJavaDocLine(" */");
}
if(introspectedTable.getPrimaryKeyColumns().contains(introspectedColumn)){
field.addAnnotation("@TableId");
}
return true;
}
@Override
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}
@Override
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}
}
二.使用代码的方式配置(使用模板引擎创建文件)
这种方式需要些很长的代码,看起来不简洁,但是更加灵活,而且能使用模板引擎。
package com.iquantex.pims.service.config.mysql;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public class GeneratorByCode {
/**
* 运行main方法进行代码生成
* @param args
*/
public static void main(String[] args) {
//1.创建代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
// 项目物理路径
String relaPath = "C:\\Users\\hzadmin\\Desktop\\pims-service\\start\\src\\main\\java";
//2.全局配置
GlobalConfig gc = new GlobalConfig();
//String projectPath = System.getProperty("user.dir");
//建议直接使用项目绝对路径,以防相对路径找不到出错
gc.setOutputDir(relaPath);
//作者
gc.setAuthor("admin");
//生成后是否打开资源管理员
gc.setOpen(false);
//重新生成时文件是否覆盖
gc.setFileOverride(true);
//主键策略
gc.setIdType(IdType.AUTO);
//定义生成的实体类中日期类型
gc.setDateType(DateType.ONLY_DATE);
//开启swagger2模式(Swagger和项目整合用于请求测试)
gc.setSwagger2(true);
//自定义文件命名 注意 %s 会自动填充表实体属性
// gc.setControllerName("%sController");
// gc.setServiceName("%sService");
// gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
autoGenerator.setGlobalConfig(gc);
//3.数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/pim?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("rr123");
dsc.setPassword("123");
dsc.setDbType(DbType.MYSQL);
autoGenerator.setDataSource(dsc);
//4.包配置
PackageConfig pc = new PackageConfig();
//模块名
pc.setParent("com.iquantex.pims.service.myTest");
// pc.setModuleName("mybatisgenerator");
// pc.setController("controller");
pc.setEntity("entity");
// pc.setService("service");
// pc.setServiceImpl("service.impl");
pc.setMapper("mapper");
autoGenerator.setPackageInfo(pc);
//5.策略配置
StrategyConfig strategy = new StrategyConfig();
//填写表名,帮助生成实体类等mapper相应代码
// strategy.setInclude("*");
//数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
//生成实体时去掉表前缀
strategy.setTablePrefix(pc.getModuleName()+"_");
//数据库表字段映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setEntityLombokModel(true);
//restful api 风格控制器
strategy.setRestControllerStyle(true);
//url 中驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
autoGenerator.setStrategy(strategy);
//6.配置自定义模板
//设置模板引擎 注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎
autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
// 配置自定义输出模板
//指定自定义模板路径, 位置:/resources/templates/entity.java.ftl(或者是.vm)
// 注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setMapper("/templates/mapper.java");
autoGenerator.setTemplate(templateConfig);
//6.执行
autoGenerator.execute();
}
}
模板所在位置。
需要什么模板就从依赖包里拿出来改改。
读取模板需要spring-boot-starter-freemarker依赖,不然会报找不到文件的错误
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>