Ibatis在项目开发中,无论是企业管理还是电子商务,Productivity作用都非常的大,淋漓尽致的体现了模板的好处,将sql的繁杂的语法和查询条件参数数据清晰的剥离出来,无论是开发速度和代码的易维护性上,都是无可比拟的。
		  但是其中有一个重大的缺陷就是数据库分页查询了,这个就不用多说了,参见 由ibatis引起的框架设计思考
  喜欢Hibernate的人,可以先去看:Ibatis VS Hibernate,  我也喜欢Hibernate,但重要的是要解决项目问题,而不是无休无止的争论!
		  不知道为什么,Ibatis对此无动于衷,反而采取了回避的态度,只是将分页的方法depreciated,草草了事。
		  我对于ibatis的源码进行了改造,起名为XIbatis, 改造主要从一下几个方面入手:
      
  1.提供与具体数据库相关的分页回调接口,调用者可以注入自己的分页实现,并注入到Ibatis中,在分页时进行回调。
         
		
				 1
				
				
				public
				 
				interface
				 Paginator 
				
						
				
				
						{
						 2
						
								
								
    
						/** */
						
								/**
								
										
								
								 3
								
										
     * 根据原始的sql和pageNo, pageSize生成分页的sql.
								 4
								
										
     * 
								@param
								 sql
								 5
								
										
     * 
								@param
								 pageNo  当前页号
								 6
								
										
     * 
								@param
								 pageSize  每页的数据条数
								 7
								
										
     * 
								@return
								 分页sql
                 @author  http://www.blogjava.net/oneeyewolf
								 8
								
										
     
								*/
						
						
								
						
						 9
						
								
    
						public
						 String getPaginatedSql(String sql, 
						int
						 pageNo, 
						int
						 pageSize);
						10
						
								
    
						11
						
								
}
				
		 
		      XIbatis代码内内置了Oracle 和 MySql分页的两种实现:

2.与spring进行了集成,可以灵活的注入不同数据库的分页实现
		
				
		
		
				
  3 .由于在原有的接口中,新增了分页查询的方法,所以需要扩展spring 对ibatis的SqlMapClientTemplate的封装。
      同时XIbatis向后兼容,保留了Ibatis的原来的所有方法。

      
4.在ibatis的接口中增加了新的分页的方法, :
        
		
				 1
				
				
				 
				/** */
				
						/**
						
								
						
						 2
						
								
   * 分页查询
						 3
						
								
   * 
						@param
						 id  The name of the statement to execute.
						 4
						
								
   * 
						@param
						 parameterObject  查询条件对象
						 5
						
								
   * 
						@param
						 pageNo  当前页号
						 6
						
								
   * 
						@param
						 pageSize  每页显示的数据条数
						 7
						
								
   * 
						@return
						
								
						
						 8
						
								
   * 
						@throws
						 SQLException
          * @author  http://www.blogjava.net/oneeyewolf
						 9
						
								
   
						*/
				
				
						
				
				10
				
						
  PageResult queryForPageResult(String id, Object parameterObject, 
				int
				 pageNo, 
				int
				 pageSize) 
				throws
				 SQLException;
				11
				
						
				
		 
		
				
5.最后的IbatisDao的实现:
		
				 1
				
				
				public
				 
				class
				 DAOIbatisImpl 
				extends
				 CustomIbatisDaoSupport 
				
						
				
				
						{
						 2
						
								
								
						
						 3
						
								
								
    
						/** */
						
								/**
								
										
								
								 4
								
										
     * 分页查询
								 5
								
										
     * 
								@param
								 id
								 6
								
										
     * 
								@param
								 params  查询参数,里面必须要有一个pageNo的页号参�?
								 7
								
										
     * 
								@param
								 pageSize
								 8
								
										
     * 
								@return
								
										
								
								 9
								
										
     
								*/
						
						
								
						
						10
						
								
								
    
						public
						 PageResult queryByPagination(String id, Map params, 
						int
						 pageNo, 
						int
						 pageSize) 
						
								
						
						
								{
								11
								
										
										
								
								12
								
										
        
								return
								 getSqlMapClientTemplate().queryForPageResult(id, params, pageNo, pageSize);
								13
								
										
    }
						
						
								
						
						14
						
								
    
						15
						
								
								
    
						/** */
						
								/**
								
										
								
								16
								
										
     * 不分页查询
								17
								
										
     * 
								@param
								 id  查询ID
								18
								
										
     * 
								@param
								 params  查询参数
								19
								
										
     * 
								@return
								
										
								
								20
								
										
     
								*/
						
						
								
						
						21
						
								
								
    
						public
						 List queryForList(String id, Map params)
						
								
						
						
								{
								22
								
										
        
								return
								 
								super
								.getSqlMapClientTemplate().queryForList(id, params);
								23
								
										
    }
						
						
								
						
						24
						
								
}
				
		 
		6.源代码文件下载, 点击这里>>
   包含:spring配置文件、example for Dao test、source code.
    
 7.RoadMap
    XIbatis未来将着手对于sql template语法进行改造,已能够适应电子商务网站复杂、多样查询的要求。
		    有改造需求的人,可以在这里提出来。
    
20人合租600元/年