MyBatisGenerator (2011-09-23)

闽涵蓄
2023-12-01

从其它网站搬家而来 (2011-09-23)


MyBatis Generator(MBG)是为MyBatis和iBATIS生成代码的工具。它可以生成
1、Java POJOs that match the table structure,即java Model。
2、MyBatis/iBATIS Compatible SQL Map XML Files.即SQLMapper文件。
3、A mapper interface that works with the MyBatis 3.x mapper infrastructure。即MyBatis3的DAO操作接口java。
   MBG工具有5种方式运行,1、命令行方式,2、ant方式,3、Maven方式,4、基于xml配置的java方式,5、基于java配置的java方式。
  
   我通过ant方式去实现了MBG,把操作的经验分享给大家。MBG有一个配置文件generatorConfig.xml。在里面设置连接数据库配置、javaModel、sqlMap、javaClient,table。
现在我大概说一下,配置内容。

<?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用于设置MBG的classPath,location可以等于只包含了数据库驱动的jar或zip路经 也可以是一个包含驱动的目录。它是一个可选的元素。 -->  
    <classPathEntry location="c:/ojdbc14.jar" />  
    <!-- targetRuntime代码生成目标,默认是MyBatis3,可以是Ibatis2Java2或者Ibatis2Java5 -->  
    <context id="DB2Tables" targetRuntime="MyBatis3">  
        <!-- 数据库连接属性,没什么好说 -->  
        <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"  
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ZFGJJ" userId="hr"  
            p_a_s_s_w_o_r_d="hr">  
        </jdbcConnection>  
        <!-- 解决数字转换问题 -->  
        <javaTypeResolver>  
            <!-- 只有一个属于forceBigDecimals,默认false。如果字段精确超过0,生成BigDecimal 如果字段精确是0,总长度10-18生成Long;   
                如果字段精确是0,总长5-9生成Integer; 如果字段精确是0,总长小于5生成Short; 如果forceBigDecimals为true,统一生成BigDecimal -->  
            <property name="forceBigDecimals" value="false" />  
        </javaTypeResolver>  
        <!-- Model生成配置 targetPackage:生成包路径,可自己生成目录 targetProject:项目路经,我试过写成"\mybatis",但总是报找不到,不知原因。   
            我换成写绝对目录,行的通。 -->  
        <javaModelGenerator targetPackage="test.model"  
            targetProject="D:\Workspace\mylearn\mybatis\">  
            <property name="enableSubPackages" value="true" />  
            <property name="trimStrings" value="true" />  
        </javaModelGenerator>  
        <!-- sqlMap配置 重复配置,不再提示,下同 -->  
        <sqlMapGenerator targetPackage="test.xml"  
            targetProject="D:\Workspace\mylearn\mybatis\">  
            <property name="enableSubPackages" value="true" />  
        </sqlMapGenerator>  
        <!-- DAO接口的生成 -->  
        <javaClientGenerator type="XMLMAPPER"  
            targetPackage="test.dao" targetProject="D:\Workspace\mylearn\mybatis\">  
            <property name="enableSubPackages" value="true" />  
        </javaClientGenerator>  
        <!-- table 数据库table的用户配置,用于配置哪些表需要。 domainObjectName:生成表前缀 -->  
        <table schema="hr" tableName="countries" domainObjectName="Customer">  
            <!-- 下面是不同数据库表特性 参见 mybatis-generator-core.**.jar 里面的 Database Specific   
                Information -->  
            <property name="ignoreQualifiersAtRuntime" value="true" />  
            <property name="runtimeTableName" value="FRED" />  
            <!-- 主键生成 如果用了这个 generatedKey ,MBG将在sqlmpper.xml里生成一个 selectKey元素在用在<insert>元素里 。 -->  
            <generatedKey column="COUNTRY_ID" sqlStatement="JDBC"  
                identity="true" />  
        </table>  
    </context>  
</generatorConfiguration>  

有了MBG的配置文件了,还要一个ant脚本。

<?xml version="1.0"?>  
  
<project default="genfiles" basedir=".">  
    <path id="build">  
        <fileset dir="${basedir}\web\WEB-INF\lib">  
            <include name="*.jar" />  
        </fileset>  
    </path>  
  
    <property name="generated.source.dir" value="${basedir}" />  
  
    <target name="genfiles" description="Generate the files">  
        <taskdef name="mbgenerator" classname="org.mybatis.generator.ant.GeneratorAntTask">  
            <classpath refid="build" />  
        </taskdef>  
        <!--configfile:填你MBG文件名  -->  
        <mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false">  
            <propertyset>  
                <propertyref name="generated.source.dir" />  
            </propertyset>  
        </mbgenerator>  
    </target>  
</project>  

 类似资料: