MyBatis-Generator最佳实践

栏目: Java · 发布时间: 7年前

内容简介:MyBatis-Generator最佳实践

最近使用MyBatis开发项目,为了快速开发,发现了一个可快速生成mapper类和mapper配置文件及Model的插件- MyBatis-Generator ,总结下该插件的使用及最佳实践.

需求

  1. 为数据库中的表teacher生成Teacher.java, TeacherMapper.java, TeacherMapper.xml
  2. 由于该插件生成的TeacherMapper.java, TeacherMapper.xml会带有example, 不希望生成example
  3. 数据库中的字段写有注释, 希望注释能自动生成在Teacher.java中

实现

实现需求一

1> 建表-teacher

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常量

# 数据库驱动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 build

Goals 参数 : mybatis-generator:generate -Dmybatis.generator.overwrite=true

实现需求二

修改配置文件-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

碰到的问题:

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

平台: Mac

Jdk: 自带的jdk_1.6.0

解决办法: 安装jdk1.7, 该版本带有tools.jar

最佳实践

在以上三点需求完成后, 还可做以下修改使得开发更快更敏捷

  1. 配置文件中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中文注释项目


以上所述就是小编给大家介绍的《MyBatis-Generator最佳实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

遗传算法原理及应用

遗传算法原理及应用

周明、孙树栋 / 国防工业出版社 / 1999-6 / 18.0

一起来看看 《遗传算法原理及应用》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具