首先声明:该文章 参照了http://www.iteye.com/topic/674839 matychen 的文章,修改了一下ibator的工作方式,实际分页的原理还是一样的,支持oracle,mysql , 如果涉及侵犯matychen的利益,请告知,我立即删除
/**
*
* @author coffeesweet
*
*/
Ibator支持分页的plugin式的开发步骤
1:所涉及到修改的类列表:
org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements目录下所有的类里给attribute属性的id修改成如下:
FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
answer.addAttribute(new Attribute("id", table.getSqlMapNamespace() + "."+XmlConstants.INSERT_STATEMENT_ID));
其他修改和添加的类
org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---OraclePaginationHeadGenerator
org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---OraclePaginationTailGenerator
org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---MysqlPaginationLimitGenerator
org.apache.ibatis.ibator.generator.ibatis2.model---ExampleGenerator
org.apache.ibatis.ibator.api.dom.java---FullyQualifiedJavaType
org.apache.ibatis.ibator.api.dom.xml.XmlElement添加了四个方法,主要用于对xxxx_SqlMap.xml的元素删除和修改
这个是添加的plugin类
org.apache.ibatis.ibator.plugins.PaginationPlugin
以上所有修改的类搜索“增加开始”或者“增加结束”就能找到修改的地方
2:示例ibatorConfig.xml文件
一定要注意该xml的元素顺序
<classPathEntry标签的位置在<ibatorConfiguration>子元素的第一个位置
ibatorContext 的子元素顺序是
(property*, ibatorPlugin*, commentGenerator?, jdbcConnection, javaTypeResolver?,
javaModelGenerator, sqlMapGenerator, daoGenerator?, table+)
所以需要注意ibatorPlugin的位置,还有,如果有多个plugin的话,加入第一个的validate失败,那么余下的所有plugin都不执行了
还要注意ibatorPlugin的两个必要属性
<property name="enablePagination" value="true" />
<property name="dbType" value="oracle" />
示例ibatorConfig.xml
<?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="oracle驱动的本地绝对路径" />
<ibatorContext id="context1" targetRuntime="Ibatis2Java5">
<!--
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
-->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.PaginationPlugin">
<property name="enablePagination" value="true" />
<property name="dbType" value="oracle" />
</ibatorPlugin>
<!--
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.SerializablePlugin"></ibatorPlugin>
-->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@*.*.*.*:1521:**" userId="**"
password="**" />
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="com.mydomain.model"
targetProject="src">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="false" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.mydomain.xml"
targetProject="src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<daoGenerator type="SPRING" targetPackage="com.mydomain.dao"
targetProject="src">
<property name="enableSubPackages" value="false" />
</daoGenerator>
<table tableName="CC_TEST1" domainObjectName="Customer">
<!-- columnOverride column="???" property="???" / -->
</table>
</ibatorContext>
</ibatorConfiguration>
3:以下是ibator的java启动模式,用来测试
package org.apache.ibatis.ibator.test;
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("ibatorConfig.xml").getFile());
// File configFile = new File("ibatorConfig.xml");
IbatorConfigurationParser cp = new IbatorConfigurationParser(warnings);
// for(String warning:warnings){
// System.out.println("1---:"+warning);
// }
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("2---:"+warning);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
4:附件是ibator的修改后的源码(包括spring的lib)和jar包,以及测试case
源码里的有关数据连接信息的东西请自行修改
测试用到了spring
ibator.jar可直接拿到工程中使用