MyBatis 06-代码生成器

  1. maven 配置
  2. generatorConfig.xml
  3. 自定义实现注释形式
  4. 生成代码

http://www.broadview.com.cn/book/3643

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&amp;characterEncoding=utf8&amp;useSSL=false&amp;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" 转载请保留原文链接及作者。

目录