? 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.tkk7.com/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.tkk7.com/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元/年