使用MyBatis Generator
在前面配置MyBatis时,根据不同的需求,操作不同的表,首先要创建与数据表对应的JavaBean,然后为这个实体类配置一个mapper映射文件,里面再写有SQL语句,如果你使用动态代理,那么还得要创建一个与xml文件对应的Mapper接口。到了后面与Spring整合后,SqlSessionFactory由Spring来管理,把加载Factory的代码也放入到xml中,节省了内存资源,不过,结果集实体类,Dao层接口和mapper映射文件也还是要自己动手配置。对于一个庞大的数据库来说,如果每一张表都要重复以上操作,为其编写增删查改的配置,工作量无疑会变得很大。这时可以配置MyBatis Generator,来根据我们的数据表,生成出符合条件的JavaBean,mapper文件和代理接口。可能你会想,自动生成的JavaBean没问题,但mapper映射文件里的增删查改操作,真的可以满足我们的自定义需求吗,例如我针对不同条件的查询,它要怎么实现?下面开看看MyBatis Generator的配置和实现,看看它为我们生成的这些文件是什么样的。
逆向工程配置
GeneratorConfig
首先是逆向工程中最重要的配置文件generatorConfig.xml,MBG怎么根据数据表生成这么多东西,关键就在于配置是否正确,逆向工程配置文件会指明连接的数据库,需要生成代码的数据表和它们的生成文件位置等,下面边看它的配置项边说:
<?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>
<!-- 每一个context代表一个单独的逆向配置 -->
<context id="TestGenerator" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 取消自动生成注释 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库连接信息 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_test"
userId="root"
password="12345">
</jdbcConnection>
<!-- 把JDBC DECIMAL和NUMERIC类型解析为Integer,为true时是解析成BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 配置生成的PO类(实体类)的位置,targetProject指示生成的位置 -->
<javaModelGenerator targetPackage="com.sm.po"
targetProject=".\src">
<!-- 是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 数据库查询结果清除前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 配置生成的mapper映射配置文件位置 -->
<sqlMapGenerator targetPackage="com.sm.mapper"
targetProject=".\src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 配置生成的Mapper代理接口位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.sm.mapper"
targetProject=".\src">
<property n