ibator改造之返回数据库注释和数据库分页
2010-11-24插件基于ibator1.2.2(http://svn.apache.org/repos/asf/ibatis/java/ibator)
个人感觉用ibator Eclipse插件不如直接用这种方式生产代码方便,出错几率小的多,还能log跟踪
参考资料
更新:
ibator_cx.rar为最新版的src。具体增加和修改的,参见ConfigIbatisOracle.xml
ibator_2010-12-7.jar版本增加了一个插件,ChangeReturnPlugin,功能:
把所有delete、update、insert返回为int类型的方法改为返回布尔值类型
大部分都用不到返回的行数,多数情况只是关心是否执行成功在配置文件中加入如下配置即可:
<!-- 修改dao里面返回值,把增删改的返回值由整型改为布尔型 -->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.ChangeReturnPlugin" />
和插件
SerializablePlugin一样使用,如果没有配置,就不会修改dao类里面的部分方法的返回值,方法还是默认返回int类型。ibator_2010-12-7.jar对应的源码过些天在上传。强烈建议用一下的
java方法生成所需的xml、dao、pojo。不建议用ibator的eclipse插件方式。自己可以新建一个
java工程,里面存放这个.java文件和ibator.jar文件。如果要生成代码到其他工程里面去可以在xml里面配置:targetProject="../你要生成的目的工程名/src">记得xml里面的3个targetProject都要修改哦。
package ibator;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.ibator.api.Ibator;
import org.apache.ibatis.ibator.config.IbatorConfiguration;
import org.apache.ibatis.ibator.config.xml.IbatorConfigurationParser;
import org.apache.ibatis.ibator.internal.DefaultShellCallback;
public class IbatorRunTest {
public static void main(String... strings) {
try {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File(ClassLoader.getSystemResource("ConfigIbatisExample.xml").getFile());
IbatorConfigurationParser cp = new IbatorConfigurationParser(
warnings);
IbatorConfiguration config = cp
.parseIbatorConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
Ibator ibator = new Ibator(config, callback, warnings);
ibator.generate(null);
for (String warning : warnings) {
System.out.println("warning:" + warning);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
修改日志
- 增加数据库注释,oracle默认不返回数据库注释,需要设置一个参数
- 当oracle得字段为number没有指定长度时,ibator会设置字段为Big Decimal
- 去掉不必要的其他注释
- 改进分页的生成方式
- 其他详情见附件源码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ibatorConfiguration
PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN"
"http://ibatis.apache.org/dtd/ibator-config_1_0.dtd">
<ibatorConfiguration>
<classPathEntry location="E:/jars/ojdbc/ojdbc14_10.2.0.4.jar" />
<ibatorContext id="FlatJava5" targetRuntime="Ibatis2Java5">
<property name="suppressTypeWarnings" value="true" />
<!-- Serializable化 -->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.SerializablePlugin" />
<!-- 这个插件添加方法为例(实际上的内部类)来支持不区分大小写像搜索。这个演示了增加功能,通过一个实例类插件,而不是延长上课。 -->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.CaseInsensitiveLikePlugin" />
<!-- 分页 -->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.PaginationPlugin">
<property name="enablePagination" value="true" />
<!-- mysql or oracle -->
<property name="databaseType" value="oracle" />
</ibatorPlugin>
<!-- 重命名example类 -->
<ibatorPlugin
type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
<!-- 产生sqlmap.xml
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.SqlMapConfigPlugin">
<property name="targetPackage" value="ibatortest.generated.flat" />
<property name="targetProject" value="src" />
</ibatorPlugin>
-->
<!-- driverClass="com.mysql.jdbc.Driver" -->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ora10g" userId="test"
password="test" >
<!-- 是否返回数据库注释,MySQL默认是true,oracle默认是false -->
<property name="remarksReporting" value="true"/>
</jdbcConnection>
<javaModelGenerator targetPackage="test.pojo"
targetProject="src">
<!-- 如果为TRUE,下面的设置了schema,那么包名就是会增加个schema名,
如果schema=“aaa” , test.pojo.aaa.XXXX;
<property name="enableSubPackages" value="true" />
-->
<!-- 继承哪个父类,这个为了有时候日志需要打印整个对象,而采用的apache打印对象的每个属性 -->
<property name="rootClass" value="ibator.BaseBean" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="test.sqlmap"
targetProject="src">
<!--
<property name="enableSubPackages" value="true" />
-->
</sqlMapGenerator>
<daoGenerator type="SPRING" targetPackage="test.dao" implementationPackage="test.dao.impl"
targetProject="src">
<!--
<property name="enableSubPackages" value="true" />
-->
</daoGenerator>
<!--
如果数据库里面有多个相同表名在不同的schema下,那么你得加上:
schema="XXXX"和<property name="ignoreQualifiersAtRuntime" value="true" />
不然ibator会以找到的最后一个为最终对象,这个问题苦恼了我很久,后来才发现
-->
<table tableName="OTA_APPLETE_INFO" schema="XXX">
<!-- 忽略schema,避免在xml中出现schema.表名
-->
<property name="ignoreQualifiersAtRuntime" value="true" />
<!-- 精确到时分秒时,需要设置下: jdbcType="TIMESTAMP"-->
<columnOverride column="UPDATED_DATE" jdbcType="TIMESTAMP"/>
</table>
</ibatorContext>
</ibatorConfiguration>