前景提要
相关推荐: ibator改造之返回数据库注释和数据库分页 ibatis的ibatorForEclipse的安装与配置和ibator的错误日志查看 Ibator优化版代码生成过程 Ibator支持分页的plugin mybatis (Ibatis ibator) generator - 1 mysql 分页插件(page/paging/pagination plugin) 基于Struts2+Spring+iBatis的web应用最佳实践系列之五(分页篇) ibator改造之返回数据库注释和数据库分页
推荐群组: struts2
更多相关推荐
iBATIS
首先声明:该文章 参照了 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可直接拿到工程中使用