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"
password="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>
ant的使用,这里就不用了。贴上生成的目录[img]
用这个MBG工具,生成后的sqlmapping文件。里面的sql语句相当的多。但在实际使用中,不是每个表都用这到这么多的SQL,所以实际项目中,最好还是生成大量需要的SQL语句。这就要使用去学习MBG的源码了。自己做成一个适合自己项目的MBG的Eclipse plug-in是最好的办法。