Mybatis.generator 自动生成domain、dao、mapper

  我们都知道使用mybatis比较繁琐的是手写domain、dao 和 sqlmap 文件,自己编写不仅容易耗时而且增加了出错的风险,那有没有一种自动化生成sqlmap的工具呢?接下来我们就介绍两款不错的工具。

common-dao

这是一款自己编写的sqlmap生成工具,实现原理是通过Velocity模板模板引擎,预先定义一个模板sqlmap.vm文件,然后通过DaoHelp类把Domain、表名、Dao等注入到Context中,通过反射获取Domain的每个属性,再把解析出来的值注入到vm模板中,生成需要的sqlmap文件。
此框架的优势是:简洁的代码结构、清晰的架构分割,domain、dao、manager三层结构,分成清晰,其次,对表结构设计也有一定的约定,比如id、is_delete、gmt_create、gmt_modified 等,对团队内部编码统一化有一定约束作用。
弊端: 需要编写domain、dao、manager等代码,略繁琐;对数据库层面设置的默认值无法支持;无法更新数据为null等。

mybatis.generator

这个是MyBatis官方推出的一款可以根据表结构自动生成domain、dao、mapper的工具。它通过连接数据库中的表,解析表结构自动解析字段,转换为驼峰形式字段,POJO对象会生成两个,一个为Basic、一个为Criteria,一个Mapper对象,一个sqlmap.xml文件。其次,Generator还提供了一系列插件,比如toString、hashCode、Serializable等,可以对POJO对象进行扩展,用户也可以继承PluginAdapter实现自定义插件,比如分页查询。
使用方法:

①maven依赖:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.2</version>
</dependency>

②配置generator.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>
    <!-- classPathEntry: 设置mysql驱动路径 -->
    <classPathEntry
            location="/Users/xinyuan/.m2/sfhtrepository/mysql/mysql-connector-java/5.1.37/mysql-connector-java-5.1.37.jar"/>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <plugin type="com.sfebiz.product.dao.plugin.PaginationPlugin"/>

        <!--为生成的Java模型创建一个toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!-- 这个插件主要用来为生成的Java模型类添加序列化接口,并生成serialVersionUID字段,值为固定的 -1 ; -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin">
            <property name="suppressJavaInterface" value="false"/>
        </plugin>

        <!-- 这个插件用来给Java模型生成equals和hashcode方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>

        <!--这个插件可以使用正则表达式的方式来重命名生成的XXXExample类-->
        <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="Example$"/>
            <property name="replaceString" value="Criteria"/>
        </plugin>

        <!-- jdbc连接信息 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://10.32.156.163:3306/haitao_products_v2" userId="sfhaitao"
                        password="sfhaitaodev">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成vo对象 -->
        <javaModelGenerator targetPackage="com.sfebiz.product.dao.dto"
                            targetProject="/Users/xinyuan/work/sf-gitlab/haitao-b2c-products/product-dao/src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 用于定义SQL映射生成器的属性。 -->
        <sqlMapGenerator targetPackage="com.sfebiz.product.dao.mapper"
                         targetProject="/Users/xinyuan/work/sf-gitlab/haitao-b2c-products/product-dao/src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的类文件以及配置文件 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.sfebiz.product.dao.mapper"
                             targetProject="/Users/xinyuan/work/sf-gitlab/haitao-b2c-products/product-dao/src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- tableName:想要生成的数据库表,自动化工具会根据该表的结构生成相应的vo对象 -->
          <table tableName="sc_attribute_value" domainObjectName="AttributeValueDO"/>
    </context>

</generatorConfiguration>

③Main函数生成对象:

public static void main(String[] args) {
        args = new String[3];
        args[0] = "-configfile";
        args[1] = "/Users/xinyuan/work/.../product-dao/src/test/resources/generator-xinyuan.xml";
        args[2] = "-overwrite";
        ShellRunner.main(args);
    }
Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s