锁定老帖子 主题:Ibator支持分页的plugin
精华帖 (0) :: 良好帖 (2) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-19
最后修改:2010-07-19
首先声明:该文章 参照了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修改成如下:
其他修改和添加的类 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启动模式,用来测试
4:附件是ibator的修改后的源码(包括spring的lib)和jar包,以及测试case 源码里的有关数据连接信息的东西请自行修改 测试用到了spring ibator.jar可直接拿到工程中使用
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-21
最后修改:2010-10-18
你这个貌似更方便一点。
刚刚看了下你的代码,不知道这个是不是为了配置方便,只在一个地方配置一次就能把所有的表都用一个分页?
能说下用法吗?
|
|
返回顶楼 | |
发表时间:2010-07-22
最后修改:2010-07-22
matychen 写道
请继续更新,
你这个貌似更方便一点。
刚刚看了下你的代码,不知道这个是不是为了配置方便,只在一个地方配置一次就能把所有的表都用一个分页?
能说下用法吗?
呵呵,你原来是把分页控制配置在了<table里,就像你说的ibator的xml验证会报错,我现在是把分页信息统一配置在<ibatorPlugin 里,这个标签是可以自定义属性的,ibator的dtd也支持,配置了这个以后,如果有多个<table的话,他们生成的Example类里都会包含分页信息的. 你可以把附件的ibator.jar替换你的ibator的eclipseplugin里,或者是直接在工程里加入ibator.jar,然后运行我给的IbatorRunTest 类生成相关class和XXX_sqlMap.xml
其实就是借鉴你的思路,我照抄修改了一下 |
|
返回顶楼 | |
发表时间:2010-09-06
我觉得还是修改它的dao Generator 相关方法,使用 list = getSqlMapClientTemplate().queryForList("TESTUSER.ibatorgenerated_selectByExample", example,startRow, pageSize); 这样的方式更通用一些吧:)
|
|
返回顶楼 | |
发表时间:2010-10-14
最后修改:2010-10-14
surpass_li 写道 我觉得还是修改它的dao Generator 相关方法,使用 list = getSqlMapClientTemplate().queryForList("TESTUSER.ibatorgenerated_selectByExample", example,startRow, pageSize); 这样的方式更通用一些吧:)
困惑的是,这种方式和我手写的sql分页是一样的吗? 今天比较困惑那种的效率高点。 this.smcTemplate.queryForList("find...", map,start,limit);(打印出来的好像是直接写的sql,并没有输入的分页参数) 还是嵌套的分页效率高? 请人解释一下。 |
|
返回顶楼 | |
浏览 7173 次