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是最好的办法。