美文网首页首页投稿(暂停使用,暂停投稿)
【持久层】Mybatis自动化生成代码

【持久层】Mybatis自动化生成代码

作者: 纳达丶无忌 | 来源:发表于2016-08-13 09:37 被阅读1278次
    题图来自花瓣网

    Mybatis是Java EE中比较主流的一种持久化orm框架,其缺点是不够灵活,需要写的代码较多,包括:

    • 一个sql-map-config.xml
    • 对应每个表的xml文件
    • 对应每个表的实体POJO
    • DAO(数据访问对象)

    好在官方提供了mybatis-generator这个组件,经过对官方例子的学习,已经正式在项目中应用了自动化代码,腰不酸腿不疼了,大大提高了生产效率。

    如何使用

    首先需要准备三个东西:

    • mybatis-generator-core.jar 自动化需要的jar包
    • mybatis-generator.xml 文件,里面需要配置数据源和一系列的自动化规则
    • 执行脚本

    一项一项说,mybatis-generator-core.jar 这个jar包,官网上可以下载,作者使用的是1.3.2版本。
    做个网盘方便懒人吧:http://pan.baidu.com/s/1dFDhWxN

    mybatis-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
                location="/Users/xxxx/workspace/xxx/lib/mysql-connector-java-5.1.5-bin.jar" />
        <context id="MysqlContext" targetRuntime="Ibatis2Java2" defaultModelType="flat">
            <property name="beginningDelimiter" value="`"/>
            <property name="endingDelimiter" value="`"/>
    
            <commentGenerator>
                <property name="suppressDate" value="true"/>
            </commentGenerator>
    
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx"
                            userId="your_account"
                            password="your_password">
            </jdbcConnection>
            <javaTypeResolver >
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <javaModelGenerator targetPackage="generate.model" targetProject="/Users/xxxx/workspace/xxxx/src/main/java">
                <property name="trimStrings" value="true" />
                <property name="enableSubPackages" value="true" />
            </javaModelGenerator>
    
            <sqlMapGenerator targetPackage="generate"  targetProject="/Users/xxxx/workspace/xxxx/src/main/resources/db">
                <property name="enableSubPackages" value="true" />
            </sqlMapGenerator>
    
    
            <javaClientGenerator type="SPRING" targetPackage="generate.dao"  targetProject="/Users/xxxx/workspace/xxxx/src/main/java"/>
    
            <table tableName="open_user" domainObjectName="OpenUser"
                   enableSelectByPrimaryKey="true"
                   enableSelectByExample="false"
                   enableDeleteByPrimaryKey="true"
                   enableDeleteByExample="false"
                   enableCountByExample="false"
                   enableUpdateByPrimaryKey="true"
                   enableUpdateByExample="false"
                   selectByExampleQueryId="false"
                   selectByPrimaryKeyQueryId="false"
            >
                <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
            </table>
        </context>
    </generatorConfiguration>
    
    

    略微做一些解释:其中项目地址和数据源很清楚,需要正确配置。javaModelGenerator和sqlMapGenerator标签中的targetPackage是需要把自动生成的代码放到什么位置。我的做法是先统一放到一个地方generate文件夹,然后根据需要挪到目标文件夹,这样不用每次修改这个targetPackage。每次只需要修改tableName即可。

    其次就是table中的一系列属性如enableSelectByPrimaryKey,含义是是否需要某某方法。这里如果全部是true,将会生成一个非常长的sqlmap文件,很不清晰,我这里只把最基本的CRUD操作放了出来,复杂查询还是后续自己手工写。

    另外,项目使用的是Spring+Mybatis,所以使用的是Spring的SqlMapClientTemplate,所以javaClientGenerator是type="SPRING"。

    还有context中targetRuntime这儿是跟你的Mybatis版本有关,作者使用的是古老的ibatis2.3.4,比较稳定(后来的Mybatis会有一些新引入的问题,这里不赘述了),所以这里用的是Ibatis2Java2。

    最后,执行脚本的话是这样的:

    java -jar ~/workspace/xxxx/lib/mybatis-generator-core-1.3.2.jar -configfile ~/workspace/xxxx/src/main/resources/db/generator.xml -overwrite

    相关文章

      网友评论

        本文标题:【持久层】Mybatis自动化生成代码

        本文链接:https://www.haomeiwen.com/subject/dfiesttx.html