MyBatis 06-代码生成器
Mybatis Generator 文档:http://mybatis.org/generator/
这里只讨论 MyBatis3Simple
maven 配置
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- properties 标签用于指定一个需要在配置中解析使用的外部属性文件,之后可以在配置中使用 ${property} 的方式引用,最多配置一个,包含 resource 和 url 两个属性,
resource:指定 classpath 下的属性文件
url:指定文件系统上的特定位置 -->
<!-- <properties resource=""/> -->
<!-- <classPathEntry location="F:\.m2\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/> -->
<!-- targetRuntime:MyBatis3Simple 不会生成与 Example 相关的方法;MyBatis3 默认值 -->
<!-- defaultModelType:为每一张表生成一个实体类,包含所有字段 -->
<context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 分隔符,MySQL ``,SQLServer [],postgresql "" -->
<!-- <property name="autoDelimitKeywords" value="true" /> -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- Java 文件编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<commentGenerator> <!-- 可以自定义实现注释形式, type="tk.mybatis.generator.MyCommentGenerator" -->
<!-- suppressAllComments:是否阻止生成注释,默认 false -->
<property name="suppressDate" value="true"/> <!-- 注释中是否不生成时间戳,默认 false -->
<property name="addRemarkComments" value="true"/> <!-- 注释是否添加表的备注信息,默认 false -->
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8"
userId="root"
password="123456">
<!-- MySQL8 会把所有库中的表都生成出来,添加下面一行即可 http://mybatis.org/generator/usage/mysql.html -->
<property name="nullCatalogMeansCurrent" value="true"/>
<!-- Oracle 需添加如下配置,使能够获取到列的注释 -->
<!-- <property name="remarksReporting" value="true"/> -->
</jdbcConnection>
<!-- targetPackage:生成实体类存放的包名
targetProject:指定目标项目路径 -->
<javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
<!-- 是否对数据库查询结果进行 trim 操作 -->
<property name="trimStrings" value="false" />
<!-- 设置所有实体类的基类 -->
<!--<property name="rootClass" value="tk.mybatis.simple.model.BaseEntity" />-->
</javaModelGenerator>
<!-- 如果未指定该标签,则不生成 xml 的 SQL 映射文件
targetPackage:生成的 xml 文件存放的包名
targetProject:指定目标项目路径 -->
<sqlMapGenerator targetPackage="test.xml" targetProject="src\main\resources"/>
<!-- XMLMAPPER:接口调用依赖 xml 文件 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java"/>
<!-- % 表示全部,要指定多个,可以配置多个 table 标签 -->
<table tableName="%">
<!-- 指定自动生成主键的属性 -->
<generatedKey column="id" sqlStatement="MySql"/>
<!-- Oracle 配置如下 -->
<!-- <generatedKey column="id" sqlStatement="select SEQ_ID.nextval from dual"/> -->
</table>
</context>
</generatorConfiguration>
自定义实现注释形式
/**
* 自己实现的注释生成器
*/
public class MyCommentGenerator extends DefaultCommentGenerator {
/**
* 由于默认实现类中的可配参数都没有提供给子类可以访问的方法,这里要定义一遍
*/
private boolean suppressAllComments;
private boolean addRemarkComments;
/**
* 设置用户配置的参数
*/
@Override
public void addConfigurationProperties(Properties properties) {
// 先调用父类方法保证父类方法可以正常使用
super.addConfigurationProperties(properties);
// 获取 suppressAllComments 参数值
suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
// 获取 addRemarkComments 参数值
addRemarkComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
}
/**
* 给字段添加注释信息
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
// 如果阻止生成所有注释,直接返回
if (suppressAllComments) {
return;
}
// 文档注释开始
field.addJavaDocLine("/**");
// 获取数据库字段的备注信息
String remarks = introspectedColumn.getRemarks();
// 根据参数和备注信息判断是否添加备注信息
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine);
}
}
// 由于 Java 对象名和数据库字段名可能不一样,注释中保留数据库字段名
field.addJavaDocLine(" * " + introspectedColumn.getActualColumnName());
field.addJavaDocLine(" */");
}
}
// 生成的代码中注释如下:
/**
* 用户名
* user_name
*/
private String userName;
生成代码
/**
* 读取 MBG 配置生成代码
*/
public class Generator {
public static void main(String[] args) throws Exception {
// MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
// 当生成的代码重复时,覆盖原代码
boolean overwrite = true;
// 读取我们的 MBG 配置文件
InputStream is = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
// 执行生成代码
myBatisGenerator.generate(null);
// 输出警告信息
for(String warning : warnings){
System.out.println(warning);
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:MyBatis 06-代码生成器
文章字数:1.2k
本文作者:Bin
发布时间:2019-11-17, 15:11:16
最后更新:2019-11-17, 21:03:55
原始链接:http://coolview.github.io/2019/11/17/MyBatis/MyBatis%2006-%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。