MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久型框架。它的使用简化了我们对数据库的操作,同事推荐这是后台操作数据库最方便的框架。
MyBatis Generator代码自动生成工具也给我们实现该框架提供了极大的便利,我们只需要经过简单的配置便可以生成想要的代码。
插件
MyBatis Generator插件已经比较成熟,MyEclipse中通过插件生成一个简单配置,我们只需要将信息补充完整,右键配置文件就能生成代码。
<?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 id="context1">
<jdbcConnection connectionURL="???" driverClass="???" password="???" userId="???" />
<javaModelGenerator targetPackage="???" targetProject="???" />
<sqlMapGenerator targetPackage="???" targetProject="???" />
<javaClientGenerator targetPackage="???" targetProject="???" type="XMLMAPPER" />
<table schema="???" tableName="???">
<columnOverride column="???" property="???" />
</table>
</context>
</generatorConfiguration>
MyBatis Generator配置说明
MyBatis Generator的配置属性节点相对较多,这里记录常用的一些配置。
generatorConfiguration:
配置主要内容,包含以下元素(有严格顺序):properties(0或1个),classPathEntry(0或多个),context(1或多个)
properties:
指定外部的属性元素,不是必须元素。
属性(不能同时使用):
resource:指定classpath下属性文件,例如根目录下的jdbc.properties;
扫描二维码关注公众号,回复: 1919701 查看本文章url:指定文件系统上的属性文件,例如file:///C:/jdbc.properties;
classPathEntry:
加载其他用途的jar,仅用于JDBC数据库连接和加载跟类重点 javaModelGenerator检查重写方法时
context:
用于指定生成一组对象的环境,至少需要一个
属性:
defaultModelType:conditional(默认,),flat(推荐,该模型为每张表生成一个实体类),hierarchical;
targetRuntime:MyBatis3(默认),MyBatis3Simple(不生成Example查询相关内容,可避免后面需要逐个配置<table>),Ibatis2Java2,Ibatis2Java5,一般使用默认;
jdbcConnection:
用于制定数据库连接信息,只能有一个,jdbc驱动不在classpath下,可通过classPathEntry导入,
属性:
driverClass:访问JDBC驱动程序的完全限定类名;
connectionURL:访问数据库JDBC的url;
userId:访问数据库的用户Id;
password:访问数据库的密码;
javaModelGenerator:
控制生成的实体类,必须配置一个,且只能有一个。
属性:
targetPackage:生成实体类的包名,受table影响;
targetProject:指定项目路径;
子元素:
constructorBased:只对MyBatis3有效,true为构造方法入参,false是setter方法入参,默认false;
enableSubPackages:true根据schema生成子包,false直接使用targetPackage,默认false;
trimStrings:对String类型字段在setter方法中调用trim()方法;
immutable:配置实体类是否可变,true时不管constructorBased设置成什么全用构造方法入参,并不会生成setter,false实体属性不能改变,默认false;
rootClass:设置所有实体类的基类,设置需要填基类的完全限定名称,若设置,在基类属性与父类属性名称一致、类型一致且有getter、setter方法情况下不替换属性;
sqlMapGenerator:
生成映射文件的包名和位置,可选配置,最多只能配置一个,但在以下情况必须配置:
1、targetRuntime为iBATIS2
2、targetRuntime为MyBatis3,且当javaClientGenerator需要XML时必须配置,如果没有配置javaClientGenerator时按照以下规则:
2.1、指定了一个sqlMapGenerator,至声称XML的SQL映射文件和实体类;
2.2、没有指定sqlMapGenerator,只生成实体类;
属性:
targetPackage:生成实体类包名,受table影响;
targetProject:指定目标项目路径;
enableSubPackages:true根据schema生成子包,false直接使用targetPackage,默认false;
javaClientGenerator:
生成DAO的包名和位置,可选配置,最多只能配置一个,不配置就不会生成Mapper接口。
属性:
type:必选,用于选择一个预定义的Mapper接口生成器,默认配置根据targetRuntime分成以下几类:
1、targetRuntime=MyBatis3:
ANNOTATEDMAPPER(基于注解的Mapper接口,不会有对应XML映射文件),
MIXEDMAPPER(XML和注解的混合形式,SqlProvider注解方法会被XML替换),
XMLMAPPER:所有方法都在XML中接口调用依赖XML文件,
2、targetRuntime=MyBatis3Simple:
ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件,
XMLMAPPER:所有方法都在XML中接口调用依赖XML文件,
3、targetRuntime=Ibatis2Java2或Ibatis2Java5:
IBATIS:生成的对象符合iBATIS的DAO框架(不建议使用),
GENERIC-CI:生成的对象将只依赖于SqlMapClient,通过构造方法注入,
GENERIC-SI:生成的对象将只依赖于SqlMapClient,通过setter方法注入,
SPRING:生成的对象符合Spring的DAO接口,
targetPackage:必选,生成实体类包名,受table影响;
targetProject:必选,指定目标项目路径;
implementationPackage:可选,指定该属性,实现类生成在这个包中;
table:
用于配置要生成的表,至少配一个,可配置多个。
属性:
tableName:必选,指定要生成的表名,可使用SQL通配符匹配多张表(%:生成所有);
简单示例
<?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>
<!-- 属性,指定classpath下的属性文件 -->
<properties resource="jdbc.properties"/>
<!-- 加载其他用途的jar -->
<classPathEntry location="mysql-connector-java-5.1.24.jar"/>
<!-- 用于指定生成一组对象的环境 -->
<context id="context" defaultModelType="flat" targetRuntime="MyBatis3Simple">
<!-- 数据库配置 -->
<jdbcConnection driverClass="${db.driver}" connectionURL="${db.url}" userId="${db.username}" password="${db.password}"/>
<!-- 控制生成的实体类 -->
<javaModelGenerator targetPackage="com.sjl.mybatis.model" targetProject="MyBatis">
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件 -->
<sqlMapGenerator targetPackage="sqlmap.auto" targetProject="MyBatis">
</sqlMapGenerator>
<!-- 生成DAO -->
<javaClientGenerator targetPackage="com.sjl.mybatis.dao" type="XMLMAPPER" targetProject="MyBatis">
</javaClientGenerator>
<!-- 要生成的表 -->
<table tableName="%"></table>
</context>
</generatorConfiguration>