但是其中有一個(gè)重大的缺陷就是數(shù)據(jù)庫(kù)分頁(yè)查詢了,這個(gè)就不用多說(shuō)了,參見(jiàn) 由ibatis引起的框架設(shè)計(jì)思考
喜歡Hibernate的人,可以先去看:Ibatis VS Hibernate, 我也喜歡Hibernate,但重要的是要解決項(xiàng)目問(wèn)題,而不是無(wú)休無(wú)止的爭(zhēng)論!
不知道為什么,Ibatis對(duì)此無(wú)動(dòng)于衷,反而采取了回避的態(tài)度,只是將分頁(yè)的方法depreciated,草草了事。
我對(duì)于ibatis的源碼進(jìn)行了改造,起名為XIbatis, 改造主要從一下幾個(gè)方面入手:
1.提供與具體數(shù)據(jù)庫(kù)相關(guān)的分頁(yè)回調(diào)接口,調(diào)用者可以注入自己的分頁(yè)實(shí)現(xiàn),并注入到Ibatis中,在分頁(yè)時(shí)進(jìn)行回調(diào)。

2

3

4

5

6

7

@author http://www.aygfsteel.com/oneeyewolf
8

9

10

11

XIbatis代碼內(nèi)內(nèi)置了Oracle 和 MySql分頁(yè)的兩種實(shí)現(xiàn):

2.與spring進(jìn)行了集成,可以靈活的注入不同數(shù)據(jù)庫(kù)的分頁(yè)實(shí)現(xiàn)
3 .由于在原有的接口中,新增了分頁(yè)查詢的方法,所以需要擴(kuò)展spring 對(duì)ibatis的SqlMapClientTemplate的封裝。
同時(shí)XIbatis向后兼容,保留了Ibatis的原來(lái)的所有方法。

4.在ibatis的接口中增加了新的分頁(yè)的方法, :

2

3

4

5

6

7

8

* @author http://www.aygfsteel.com/oneeyewolf
9

10

11

5.最后的IbatisDao的實(shí)現(xiàn):

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

6.源代碼文件下載, 點(diǎn)擊這里>>
包含:spring配置文件、example for Dao test、source code.
7.RoadMap
XIbatis未來(lái)將著手對(duì)于sql template語(yǔ)法進(jìn)行改造,已能夠適應(yīng)電子商務(wù)網(wǎng)站復(fù)雜、多樣查詢的要求。
有改造需求的人,可以在這里提出來(lái)。
20人合租600元/年
posted on 2008-12-01 11:51 Speed 閱讀(1053) 評(píng)論(4) 編輯 收藏 所屬分類: 框架設(shè)計(jì) 、J2EE 、Hibernate & Ibatis
評(píng)論
# re: XIbatis 發(fā)布-對(duì)ibatis的分頁(yè)查詢進(jìn)行了擴(kuò)展和功能增強(qiáng) 2008-12-01 16:09 charlie's logic
good job. 回復(fù) 更多評(píng)論
# re: XIbatis 發(fā)布-對(duì)ibatis的分頁(yè)查詢進(jìn)行了擴(kuò)展和功能增強(qiáng) 2008-12-01 17:10 tp
有前途,如果列中帶有函數(shù)就不建議這么搞了。 回復(fù) 更多評(píng)論
# re: XIbatis 發(fā)布-對(duì)ibatis的分頁(yè)查詢進(jìn)行了擴(kuò)展和功能增強(qiáng) 2008-12-02 14:06 stone2083
想法是好的,做法是不可取的。
任何對(duì)第三方組件的擴(kuò)展,需要遵循開(kāi)放-封閉原則:只能尋找組件的擴(kuò)展點(diǎn)進(jìn)行功能擴(kuò)展,不允許直接修改源碼。
試想一下,你修改了源代碼,以后如何解決與官方網(wǎng)站版本升級(jí)的同步問(wèn)題?
沒(méi)有團(tuán)隊(duì)敢使用你的包。
很早之間,我就有這個(gè)想法。但是發(fā)覺(jué)MappedStatement,SqlMapExecutorDelegate都是面向?qū)崿F(xiàn)編程;
并且SqlMapClient也是通過(guò):
public SqlMapConfiguration() {
errorContext = new ErrorContext();
delegate = new SqlMapExecutorDelegate();
typeHandlerFactory = delegate.getTypeHandlerFactory();
client = new SqlMapClientImpl(delegate);
registerDefaultTypeAliases();
}
直接new出來(lái)的。
所以,似乎找不到擴(kuò)展的地方來(lái)實(shí)現(xiàn)“分頁(yè)”的需求。
不知道大家是否有更好的方案,歡迎討論。 回復(fù) 更多評(píng)論
# re: XIbatis 發(fā)布-對(duì)ibatis的分頁(yè)查詢進(jìn)行了擴(kuò)展和功能增強(qiáng) 2008-12-02 15:23 Speed
@stone2083good point, actually you need to balance the pros and cons for your own team. cause it is open source, so if it do not fully match your way, just modify the code to facilitate your application. 回復(fù) 更多評(píng)論