MyBatis-Generator最佳實踐

最近使用MyBatis開發項目,爲了快速開發,發現了一個可快速生成mapper類和mapper配置文件及Model的插件-MyBatis-Generator,總結下該插件的使用及最佳實踐.java

需求mysql

爲數據庫中的表teacher生成Teacher.java, TeacherMapper.java, TeacherMapper.xml 因爲該插件生成的TeacherMapper.java, TeacherMapper.xml會帶有example, 不但願生成example 數據庫中的字段寫有註釋, 但願註釋能自動生成在Teacher.java中 實現git

實現需求一github

1> 建表-teacherweb

CREATE TABLE `test`.`teacher` (
	`id` bigint NOT NULL DEFAULT 0 COMMENT '主鍵id',
	`name` varchar(40) NOT NULL DEFAULT '' COMMENT '名稱',
	`age` smallint NOT NULL DEFAULT 0 COMMENT '年齡',
	PRIMARY KEY (`id`)
) COMMENT='教師表';

2> 配置properties常量sql

# 數據庫驅動jar 路徑
drive.class.path=/Users/arccode/repo/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar

# 數據庫鏈接參數
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
jdbc.username=mysql
jdbc.password=mysqlpwd

# 包路徑配置
model.package=com.arccode.web.model
dao.package=com.arccode.web.dao
xml.mapper.package=com.arccode.web.dao

target.project=src/main/java

3> 配置文件-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 url="${mybatis.generator.generatorConfig.properties}"/>

    <!--數據庫驅動包路徑 -->
    <classPathEntry location="${drive.class.path}"/>

    <context id="MySQLTables" targetRuntime="MyBatis3">
        <!--關閉註釋 -->
        <commentGenerator>	
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!--數據庫鏈接信息 -->
        <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <!--生成的model 包路徑 -->
        <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--生成xml mapper文件 路徑 -->
        <sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
        </sqlMapGenerator>

        <!-- 生成的Dao接口 的包路徑 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
        </javaClientGenerator>

        <!--對應數據庫表名 -->
        <table tableName="teacher">

        </table>
    </context>
</generatorConfiguration>

4> 運行maven - Run As Maven buildmybatis

Goals 參數 : mybatis-generator:generate -Dmybatis.generator.overwrite=trueapp

實現需求二maven

修改配置文件-generatorConfig.xml, 將table標籤修改以下

<table tableName="teacher" enableCountByExample="false" 
	enableUpdateByExample="false" enableDeleteByExample="false" 
	enableSelectByExample="false" selectByExampleQueryId="false">
</table>

實現需求三

修改mybatis-generator源碼

位置: mybatis-generator-core/src/main/java/org/mybatis/generator/internal/DefaultCommentGenerator.java

修改該類的方法: addFieldComment

public void addFieldComment(Field field,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {
        if (suppressAllComments) {
            return;
        }

        StringBuilder sb = new StringBuilder();

        field.addJavaDocLine("/**"); //$NON-NLS-1$
//        field.addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$

        sb.append(" *  "); //$NON-NLS-1$
        sb.append(introspectedColumn.getRemarks());
        sb.append(",所屬表字段爲");
        sb.append(introspectedTable.getFullyQualifiedTable());
        sb.append('.');
        sb.append(introspectedColumn.getActualColumnName());
        field.addJavaDocLine(sb.toString());

//        addJavadocTag(field, false);

        field.addJavaDocLine(" */"); //$NON-NLS-1$
    }

若是不想修改源碼, 能夠下載mybatis生成中文註釋項目, maven本地安裝後在pom中配置version便可.

使用git克隆github項目(mybatis-generator源項目)

// 克隆 parent
git clone https://github.com/mybatis/parent.git
// 將該項目安裝到本地maven庫, mybatis-generator依賴於該項目
mvn clean install -Dmaven.test.skip=true
// 克隆 mybatis-generator
git clone https://github.com/mybatis/generator.git
// 將該jar安裝到本地, 以後項目中使用, 時間有點長, 能夠喝杯咖啡
mvn clean install -Dmaven.test.skip=true

碰到的問題:

一、Could not find artifact com.sun:tools:jar:0 at specified path…

平臺: Mac

Jdk: 自帶的jdk_1.6.0

解決辦法: 安裝jdk1.7, 該版本帶有tools.jar

最佳實踐

在以上三點需求完成後, 還可作如下修改使得開發更快更敏捷

配置文件中commentGenerator配置項最好不要設置爲不生成註釋,由於這樣帶來的問題是在自動生成的代碼上不會存在@mbggenerated 這樣的標記,這個標記是用來標註這些代碼是代碼生成器生成的,若是關閉了註釋,咱們在屢次使用mybatis generator從新生成代碼時會致使在已有生成的文件上追加生成重複的內容,致使代碼錯誤,故我建議若是你只生成一次代碼,之後再不用工具生成能夠關閉註釋,若是會重複生成就要把註釋開關打開。如下配置參數是關閉時間註釋:

<commentGenerator> <property name="suppressDate" value="false"/> </commentGenerator>

Model示例

public class Teacher {

    /**
     *  主鍵id,所屬表字段爲teacher.id
     */
    private Long id;

    /**
     *  名稱,所屬表字段爲teacher.name
     */
    private String name;

    /**
     *  年齡,所屬表字段爲teacher.age
     */
    private Short age;

    /**
     *  性別,所屬表字段爲teacher.sex
     */
    private String sex;

    /**
     * 獲取 主鍵id 字段:teacher.id
     *
     * @return teacher.id, 主鍵id
     */
    public Long getId() {
        return id;
    }

    /**
     * 設置 主鍵id 字段:teacher.id
     *
     * @param id teacher.id, 主鍵id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 獲取 名稱 字段:teacher.name
     *
     * @return teacher.name, 名稱
     */
    public String getName() {
        return name;
    }

    /**
     * 設置 名稱 字段:teacher.name
     *
     * @param name teacher.name, 名稱
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    /**
     * 獲取 年齡 字段:teacher.age
     *
     * @return teacher.age, 年齡
     */
    public Short getAge() {
        return age;
    }

    /**
     * 設置 年齡 字段:teacher.age
     *
     * @param age teacher.age, 年齡
     */
    public void setAge(Short age) {
        this.age = age;
    }

    /**
     * 獲取 性別 字段:teacher.sex
     *
     * @return teacher.sex, 性別
     */
    public String getSex() {
        return sex;
    }

    /**
     * 設置 性別 字段:teacher.sex
     *
     * @param sex teacher.sex, 性別
     */
    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }
}

參考資料

MyBatis Generator使用小記

爲Maven指定tools.jar ,解決Missing artifact com.sun:tools:jar:1.5.0錯誤

Maven Frequently Asked Technical Questions

使用 OSC Maven 第三方倉庫

MYBATIS GENEATOR 詳解

mybatisn_generator_cn中文註釋項目

相關文章
相關標籤/搜索