写在前面的前面的话,希望用过的朋友们温故知新,没用过的同学可以试一下用用,学习知识嘛都是孰能生巧,切忌眼高手低!
ibator替代工具mybatis Generator,在做web开发的时候,为了更加的专注于业务逻辑,诞生了很多的orm框架,在工作中为了提高开发效率,我们就会使用持久层代码自动生成工具,只要数据库提交创建好,插件就会帮我们生成大部分的文件,之前一直使用ibator,和abator 。ibator和abator都是针对ibatis开发的代码生成工具,现在ibatis迁移到了github上,同时改名为mybatis,ibator和abator的插件目前已经不再更新了,目前eclipse的部分版本已经不兼容ibator插件和abator了。然而针对于mybatis的代码自动生成也已经有了替换的工具mybatis Generator ,下面简要的介绍mybatis Generator 的使用方法。笔者目前是针对eclipse,mybatis Generator插件的版本是 1.3.5 ,而intelliJ Idea也可以安装mybatis插件。
1.下面是mybatis Generator的原始配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCtype generatorConfiguration PUBLIC "- MyBatis Generator Configuration 1.0//EN" ";>
<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>
这份原始配置文件缺少一项至关重要的标签<classPathEntry location="" /> ,这个标签跟<context/>标签同级。
<jdbcConnection/>这个标签不用多说,数据库连接相关配置
<javaModelGenerator/>生成java实体类对象,和相应的example文件
<sqlMapGenerator/> sqlMap映射文件
<javaClientGenerator/> java数据库持久层
<table schema="???" tableName="???">
<columnOverride column="???" property="???" />
</table>
这个是关于数据库表字段和属性对应相关的配置,如果不配置<columnOverride/>标签,那么就会生成全部字段,属性字段默认是数据库字段。
<targetPackage/>和<targetProject/>这两个标签很醒目了,目标包和目标项目,分别配置包的全路径,和工程名称就可以了。
如果想生成ibatis的配置文件,只需在一下两个标签内配置即可:
<context >标签,Optional Attributes 里面配置可选标签, 其中targetRuntime配置运行环境MyBatis3,Ibatis2Java2,Ibatis2Java5,MyBatis3Simple,默认的是mybatis3
<javaClientGenerator>标签,Required Attributes 要求属性,生成client文件的形式,如果是ibatis可以是GENERIC-CI,GENERIC-SI,IBATIS。
配置文件配置完成后保存,然后eclipse右键运行Generate mybatis插件即可
2.下面介绍下生成文件的用法,targetRuntime=Ibatis2Java5,<javaClientGenerator>标签内type=GENERIC-CI配置为以生成ibatis文件为例:
TestTableExample 为自动生成文件,
TestTableExample example = new TestTableExample();
exam()
.andField1EqualTo(5)
.andField2IsNull();
exam(exam()
.andField3NotEqualTo(9)
.andField4IsNotNull());
List<Integer> field5Values = new ArrayList<Integer>();
(8);
(11);
(14);
(22);
exam(exam()
.andField5In(field5Values));
exam(exam()
.andField6Between(3, 7));
In the above example, the dynamically generated where clause will effectively be:
where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7);
使用的时候直接使用xxxDao.selectByExample(example);
并且支持order by 和distinct 。
更多用法参见