翻譯:iBATIS 3.0 草案——接口綁定

          Posted on 2007-06-19 17:40 Tommy Jian 閱讀(1293) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): iBATIS

          接口綁定

             隨著Java 5的推廣,我們有機(jī)會(huì)來(lái)改善用戶(hù)體驗(yàn)。其中最重要的是借助Java 5可以消除令人生惑的類(lèi)型轉(zhuǎn)換,可以消除SQL映射基于字符的調(diào)用方式。舉例來(lái)說(shuō),現(xiàn)在在調(diào)用SQL映射的時(shí)候是這樣的:

          Employee employee = (Employee)sqlMapper.queryForList("getEmployee", 5);
          //...and...
          List employees = sqlMapper.queryForList("listAllEmployees");

             問(wèn)題是很明顯的。第一,上面的兩個(gè)例子中被映射的語(yǔ)句的名稱(chēng)都是基于字符串的,而這很容易導(dǎo)致錯(cuò)誤。這種方式也不會(huì)得到IDE工具、編譯器的支持和管理。

             第二個(gè)問(wèn)題是存在參數(shù)和返回值類(lèi)型安全問(wèn)題。在第一個(gè)例子中,誰(shuí)能保證參數(shù)的類(lèi)型一定是Integer?而誰(shuí)又能保證您得到的返回值一定是Employee類(lèi)型呢?這里,編譯器也不會(huì)給出任何償錯(cuò)誤報(bào)告和提示。而只有運(yùn)行時(shí)異常會(huì)被拋出。

             最后,在集合的例子中問(wèn)題也是相同的。在運(yùn)行前,您可能會(huì)獲得Dogs的集合,而不是Employees。

             總之,這種方式雖然比JDBC強(qiáng),但是也讓人倍感難受,還是存在改善的空間。

             在Java 5中我們可以充分使用范型來(lái)規(guī)范集合類(lèi)型。這樣,我們不需要進(jìn)行特殊的配置就可以為集合類(lèi)型建立一致的API。我們不需要在XML文件中聲明類(lèi)型,不需要通過(guò)字符名稱(chēng)來(lái)調(diào)用被映射的語(yǔ)句,相反,我們可以充分利用表達(dá)好且類(lèi)型安全的接口類(lèi)型。沒(méi)有什么新東西需要學(xué)習(xí),只是普通的接口就可以了。

          public interface EmployeeMapper

            Employee getEmployee (int employeeId); 
            List listAllEmployees();
          }

             這就夠了!iBATIS來(lái)幫我們實(shí)現(xiàn)這個(gè)接口。

             現(xiàn)在我們可以以一種更加簡(jiǎn)潔和安全的方式來(lái)調(diào)用被映射的語(yǔ)句了。

          Employee emp = empMapper.getEmployee(5);
          //...and...
          List employees = empMapper.listAllEmployees();

             在上面的調(diào)用中沒(méi)有類(lèi)型轉(zhuǎn)換、沒(méi)有字符串,而且參數(shù)和返回值的類(lèi)型是、安全的。額外的代碼就是針對(duì)接口使用XML或者Java的標(biāo)識(shí)進(jìn)行配置。最多我們只需要配置SQL語(yǔ)句、需要進(jìn)行重載的參數(shù)或者返回值類(lèi)型。

             接口描述了所需要的一切。

          • 語(yǔ)句的名稱(chēng)(默認(rèn)情況下與方法的名字一致)
          • 參數(shù)類(lèi)型(如果存在的話(huà))
          • 返回值類(lèi)型(包括范型集合的元素的類(lèi)型)

             而其中最有趣的就是我們可以基于方法名稱(chēng)這樣的約定來(lái)生成SQL映射。以后關(guān)于配置的章節(jié)中將詳細(xì)討論這些細(xì)節(jié)。

             接口綁定的方法使得諸如Spring這樣的框架將映射類(lèi)注入其他類(lèi)變得容易,同時(shí)也不需要將事務(wù)管理的過(guò)多細(xì)節(jié)公開(kāi)。

          Feedback

          # re: 翻譯:iBATIS 3.0 草案——接口綁定  回復(fù)  更多評(píng)論   

          2007-06-19 22:28 by Anders小明
          這個(gè)好,非常期待!

          # re: 翻譯:iBATIS 3.0 草案——接口綁定  回復(fù)  更多評(píng)論   

          2007-06-19 23:54 by search-computer
          不錯(cuò)

          # re: 翻譯:iBATIS 3.0 草案——接口綁定  回復(fù)  更多評(píng)論   

          2007-06-20 01:26 by 永恒
          統(tǒng)一的mapper通過(guò)接口細(xì)化為多個(gè)mapper,中間加了一層。的確好
          但也沒(méi)有質(zhì)的改變啊

          # re: 翻譯:iBATIS 3.0 草案——接口綁定  回復(fù)  更多評(píng)論   

          2007-06-20 07:55 by Tommy Jian
          @永恒
          加了一層之后,一方面可以克服原來(lái)類(lèi)型不安全和SQL映射使用純字符串的問(wèn)題,另外可以在這一層上使用annotation來(lái)配置。
          主站蜘蛛池模板: 康平县| 海林市| 曲沃县| 平凉市| 会宁县| 久治县| 同心县| 罗定市| 习水县| 出国| 方山县| 平阳县| 澄迈县| 永平县| 罗平县| 黄陵县| 玉树县| 东宁县| 通化县| 当涂县| 开原市| 玉田县| 津市市| 卫辉市| 旅游| 扶绥县| 姜堰市| 民丰县| 信宜市| 盐山县| 平江县| 卢龙县| 菏泽市| 亚东县| 南投市| 胶州市| 九龙县| 赫章县| 错那县| 静宁县| 贵德县|