`
matychen
  • 浏览: 172483 次
  • 性别: Icon_minigender_1
  • 来自: 武汉外来务工人员
社区版块
存档分类
最新评论

ibator1.2.1扩展支持Oracle、MySQL分页

阅读更多
最近在项目中用到ibator1.2.1,但是感觉其自动生成的代码不能满足自己的需要,在网上找了资料:
1.eclipse ibabis代码生成插件abator功能扩展
2.aquan198163 写道 可以用iBatis的include标签设计类似模板的东西,简化分页sql
自己下载代码进行了相关扩展:
1.支持Oracle、MySQL分页
2.在生成的example类增加了Oracle、MySQL分页的相关字段

0.3版本:
增加了控制生成oracle分页和mysql分页的属性(原来是都生成)
	<!-- 
		<table tableName="BROWSELOGS" enableMysqlPagination="true">
		<table tableName="BROWSELOGS" enableOraclePagination="false" >
			 -->
		<table tableName="BROWSELOGS">
			<columnOverride column="ID" javaType="Integer" />
			<columnOverride column="VISITOR" javaType="Integer" />
			<columnOverride column="DOTIME" jdbcType="Timestamp" />
		</table>

当然这个时候,xml会报错,因为你引用的是网络上面的dtd("http://ibatis.apache.org/dtd/ibator-config_1_0.dtd"),不用理会,一样可以生成,如果都不填写,就是都不生成。
建议在ibatorContext加上Ibatis2Java5
	<classPathEntry location="D:\UserLibraries\Oracle10g_driver.jar" />
	<ibatorContext id="context" targetRuntime="Ibatis2Java5"  >

完整版的配置:
<?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="D:\UserLibraries\mysql-connector-java-5.1.12-bin.jar" />
	<ibatorContext id="context1" targetRuntime="Ibatis2Java5">
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/demo" userId="root"
			password="aaa" />
		<javaModelGenerator targetPackage="com.ibatis.pojo"
			targetProject="test" />
		<sqlMapGenerator targetPackage="com.ibatis.sqlmap"
			targetProject="test" />
		<daoGenerator targetPackage="com.ibatis.dao"
			targetProject="test" type="SPRING" />
		<table tableName="ueye_account" enableMysqlPagination="true">
		<columnOverride column="ID" javaType="Integer" />
			<columnOverride column="VISITOR" javaType="Integer" />
			<columnOverride column="DOTIME" jdbcType="Timestamp" />
		</table>
	</ibatorContext>
</ibatorConfiguration>


0.2版本增加了:
4个list的set方法:

protected List criteriaWithoutValue;

        protected List criteriaWithSingleValue;

        protected List criteriaWithListValue;

        protected List criteriaWithBetweenValue;

原来的方法里面没有set。只有get方法,我觉得有时候我不知道传入的是哪个字段,要自己定义一个条件不知道怎么放进去,我就想法先取出list,在set进去,如下:

//		//过滤条件,仿造的是example类中的情况
//		Criteria criteria=example.createCriteria();
//		//得到example里面的list
//		List<Object> listSingle=criteria.getCriteriaWithSingleValue();
//		//再把它注入回去
//		criteria.setCriteriaWithSingleValue(this.processFilterInfo(listSingle, sigma.getFilterInfo()));
processFilterInfo方法:
public List<Object> processFilterInfo(List<Object> listSingle,List<FilterInfo> filterInfos){
		for (int i = 0; i < filterInfos.size(); i++) {
			String columnId=filterInfos.get(i).getColumnId();
			String logic=filterInfos.get(i).getLogic();
			String value=filterInfos.get(i).getValue();
			if(logic.equalsIgnoreCase("equal")){
				Map<String,Object> map = new HashMap<String,Object>();
	            map.put("condition", columnId+" =");
	            map.put("value", value);
	            listSingle.add(map);
			}else if(logic.equalsIgnoreCase("notequal")){
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("condition", columnId+" <>");
				map.put("value", value);
				listSingle.add(map);


清单一(修改的相关类):
org.apache.ibatis.ibator.generator.ibatis2.sqlmap---SqlMapGenerator
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.generator.ibatis2.sqlmap.elements---SelectByExampleWithBLOBsElementGenerator
org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---SelectByExampleWithoutBLOBsElementGenerator
org.apache.ibatis.ibator.api.dom.java---FullyQualifiedJavaType
搜索“增加开始”或者“增加结束”就能找到修改的地方

SQL_MAP.xml部分:
 <!-- oracle 分页头 -->
  <sql id="oracle_Pagination_Head" >
    <dynamic >
      <isNotEmpty property="oracleStart" >
        <isNotEmpty property="oracleEnd" >
          <![CDATA[select * from ( select row_.*, rownum rownum_ from ( ]]>
        </isNotEmpty>
      </isNotEmpty>
    </dynamic>
  </sql>
   <!-- oracle 分页尾 -->
  <sql id="oracle_Pagination_Tail" >
    <dynamic >
      <isNotEmpty property="oracleStart" >
        <isNotEmpty property="oracleEnd" >
          <![CDATA[) row_ where rownum <= #oracleEnd# ) where rownum_ > #oracleStart#]]>
        </isNotEmpty>
      </isNotEmpty>
    </dynamic>
  </sql>
   <!-- MySQL 分页 -->
  <sql id="mysql_Pagination_Limit" >
    <dynamic >
      <isNotEmpty property="mysqlOffset" >
        <isNotEmpty property="mysqlLength" >
          <![CDATA[ limit #mysqlOffset# , #mysqlLength# ]]>
        </isNotEmpty>
      </isNotEmpty>
    </dynamic>
  </sql>
  <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap" parameterClass="com.ibatis.pojo.GoodsExample" >
    <!-- 增加oracle分页头部 -->
    <include refid="oracle_Pagination_Head" />
    select id, name, stand, money, leavings, orders
    from goods
    <isParameterPresent >
      <include refid="goods.ibatorgenerated_Example_Where_Clause" />
      <isNotNull property="orderByClause" >
        order by $orderByClause$
      </isNotNull>
    </isParameterPresent>
    <!-- 增加oracle分页尾部 -->
    <include refid="oracle_Pagination_Tail" />
    <!-- 增加MySQL分页 -->
    <include refid="mysql_Pagination_Limit" />
  </select>

Example类部分:
public class GoodsExample {
    protected String orderByClause;

    private Integer oracleStart;

    private Integer oracleEnd;

    private Integer mysqlOffset;

    private Integer mysqlLength;

    protected List oredCriteria;

    public GoodsExample() {
        oredCriteria = new ArrayList();
    }
}


附件为ibator1.2.1插件,直接复制到Eclipse的dropins文件夹下即可
分享到:
评论
6 楼 matychen 2013-10-28  
hackpro 写道
哥们,SqlMapClientTemplate 已经提供翻页功能了
getSqlMapClientTemplate().queryForList(this.getSqlPrefix()+".abatorgenerated_selectOnPage", e, skipResults, maxResults);


<select id="abatorgenerated_selectOnPage" parameterClass="com.xxx.model.xxxxExample"
		resultMap="abatorgenerated_BasAccountinfoTbResult">
		select col,col2  	   from table
		<isParameterPresent>
			<include refid="table.abatorgenerated_Example_Where_Clause" />
			<isNotNull property="orderByClause">
				order by $orderByClause$
			</isNotNull>
		</isParameterPresent>
		
	</select>

那是内存分页,你试一试你这个语句在百万级别的表中执行效率,或者debug到queryForList 这个方法中试一试。
5 楼 hackpro 2013-10-28  
哥们,SqlMapClientTemplate 已经提供翻页功能了
getSqlMapClientTemplate().queryForList(this.getSqlPrefix()+".abatorgenerated_selectOnPage", e, skipResults, maxResults);


<select id="abatorgenerated_selectOnPage" parameterClass="com.xxx.model.xxxxExample"
		resultMap="abatorgenerated_BasAccountinfoTbResult">
		select col,col2  	   from table
		<isParameterPresent>
			<include refid="table.abatorgenerated_Example_Where_Clause" />
			<isNotNull property="orderByClause">
				order by $orderByClause$
			</isNotNull>
		</isParameterPresent>
		
	</select>
4 楼 peng2e 2010-07-13  
这个东西还第一次听说~都不知道杂用~闷
3 楼 matychen 2010-05-26  
rrsy23 写道
为什么不直接扩展ibatis 内置支持 开发不是更简单

不知道怎么弄,而且效率如何不知道,
如果直接写sql,可以自己优化。
2 楼 rrsy23 2010-05-26  
为什么不直接扩展ibatis 内置支持 开发不是更简单
1 楼 matychen 2010-05-26  
你可以鄙视楼主,你可以不下载,但是你别投隐藏,谢谢!

相关推荐

    ibator1.2.1配置文件

    标题中的"ibator1.2.1配置文件"指的是基于Apache Ibator的1.2.1版本的配置文件,这是一个用于简化MyBatis框架中DAO层(数据访问对象)开发的工具。Ibator是iBATIS(现在已经演变为MyBatis)的一个扩展,它能够根据...

    ibator1.2.1

    《Ibatis Auto Generation Tool - Ibator 1.2.1详解》 Ibatis,作为一款优秀的持久层框架,以其简洁的SQL映射和灵活的数据访问能力,在Java开发领域备受推崇。而Ibator,作为Ibatis的一员,是其提供的一款自动化...

    处理后的ibator1.2.1

    去除了注释、去除Example方法及去除生成的id前面的“ibatorgenerated_”

    ibator 1.2.1

    3. 扩展性:ibator提供API和扩展机制,允许开发人员添加自定义逻辑,例如自定义生成策略。 4. 集成友好:作为Eclipse插件,ibator无缝集成到开发环境中,便于日常开发工作。 【eclipse】是Java开发中广泛使用的IDE...

    适用mysql分页的ibator

    MySQL是一种广泛使用的开源关系型数据库管理系统,而iBatis(现在已经更名为MyBatis)是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在处理大量数据时,分页查询是非常常见且重要的功能,它可以...

    ibator-eclipse插件1.2.1 包含优化后jar包

    "修改后jar"文件可能是指经过优化的Ibator核心库,这些库文件可能已经过修改,以支持插件的新特性或改进。 总的来说,Ibator-Eclipse插件1.2.1版是开发者提高工作效率、简化数据库操作的得力助手。它通过消除不必要...

    ibator的eclipse插件

    - **支持多种数据库**:ibator支持多种主流的数据库,如MySQL、Oracle、SQL Server等。 - **逆向工程**:从现有数据库表快速生成Java代码,节省手工编写的时间。 **4. 集成到项目** 生成的代码可以直接导入到...

    ibator优化的jar包

    ibator插件优化的jar包,安装完ibator后,将eclipse\plugins\org.apache.ibatis.ibator.core_1.2.1下的jar包替换即可。

    iBATOR-V1.1.0

    而iBATOR则是iBATIS的扩展,它通过简单的配置,可以根据数据库中的表结构自动化地生成与之对应的Java模型类、DAO接口和Mapper XML文件,使得开发过程更加高效。 iBATOR的使用通常涉及到以下几个关键知识点: 1. **...

    eclipse集成的ibator插件

    此外,Ibator还支持逆向工程,即根据已有的Java类和Mapper接口,生成对应的数据库表结构,这对于理解已有项目的数据模型非常有帮助。 MyBatis是一个轻量级的持久层框架,它允许开发者通过XML或注解来编写SQL语句,...

    ibator使用心得

    2. `ibatorPlugin`: 定义插件,可以使用预定义的插件或自定义插件来扩展ibator的功能。例如,`RenameExampleClassPlugin`用于重命名生成的Example类,将默认的`Example`后缀替换为`Repository`。 3. `jdbc...

    ibator使用指导

    - 下载IbatorForEclipse1.2.1.zip插件压缩文件,并将其解压到本地文件夹,例如"ibator"文件夹。 - 打开MyEclipse,选择菜单栏的`Help` -&gt; `Software Updates` -&gt; `Add/Remove Software...`。 - 在弹出的对话框中...

    IBATOR动态生成sql和DAO层

    7. **扩展和定制**:除了默认的生成模板,iBator还支持自定义插件和模板,可以根据项目需求定制生成的代码风格和功能。 总的来说,IBATOR作为一个强大的自动化工具,能够显著提高开发效率,减少手动编写重复代码的...

    Ibator参考程序

    7. **定制化开发**:通过扩展Ibator的插件系统,开发者可以自定义代码生成逻辑,例如添加自定义注解、修改生成的类名或方法名,甚至实现更复杂的业务逻辑代码生成。 8. **版本控制与重构**:在实际项目中,当数据库...

    ibator插件+ibatorConfig文件

    在这个压缩包文件IbatorForEclipse1.2.1中,包含的主要是ibator插件的相关内容以及ibator的配置文件。 首先,ibator插件是集成在Eclipse开发环境中的一个实用工具,它的主要功能是在与数据库连接后,根据用户定义的...

    IBator的安装使用

    IBator是Apache iBATIS项目的一个子项目,它是一个代码生成器,能够帮助开发人员自动化创建基于iBATIS的持久层代码,包括Java模型类、SQL映射文件以及DAO接口。通过减少手动编写这些常见的重复性工作,IBator可以...

    ibatis自动生成工具ibator及配置文件示例

    标题 "ibatis自动生成工具ibator及配置文件示例" 提到的是关于iBatis的自动化工具ibator的使用和配置。iBatis是一个优秀的Java持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,使得数据库操作与业务逻辑...

    ibator1.2.2无注释

    ibator1.2.2多了点功能,具体可以百度,重新编译了下,生成注释去掉了

    为 Ibatis 2.3.4 构建增强的 Apache Ibator 实体类生成工具

    Ibator is a code generator for iBATIS. Ibator will introspect a database table (or many tables) and will generate iBATIS artifacts that can be used to access the table(s). This abates some of the ...

    ibator教学视频

    ibator教学视频,手把手教你使用ibator

Global site tag (gtag.js) - Google Analytics