到:無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數(shù)時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。那么為什么會有類型處理器呢?這一點并不難理解,SQL語句事實上可以理解為一門面向數(shù)據(jù)庫的編程語言。所以相對而言都有自己的數(shù)據(jù)類型。這也就意味著存在數(shù)據(jù)類型不一至的問題。同時不同的數(shù)據(jù)庫之間數(shù)據(jù)類型還有一定的差義。類型處理器則就是用于處理數(shù)據(jù)類型不一至的問題。

筆者看過幾個不同的ORM框架都存在著類型處理器的概念??梢婎愋吞幚砥髟贠RM框架上實現(xiàn)有多么重要。在官網(wǎng)上面已經列出了20多種的內部類型處理器。筆者建議最好選擇性的看。好比如說筆者當前的列子里面用到的一個叫UnknownTypeHandler的類型處理器。

List<Product> products = dao.SelectProducts(30, "a");
<select id="SelectProducts" resultMap="result" >
        select * from Products where #{0} > ProductID and ProductName like #{1}</select>

例子里面并沒有指出是什么樣子的JAVA類型。所以當然是UnknownTypeHandler類型了。即然這樣子我們不煩設置一下他的類型在來看看。我們只要把上面的配置修改一下就可以了。如下紅色標記。

<select id="SelectProducts" resultMap="result" >
        select * from Products where #{0,javaType=int,jdbcType=NUMERIC} > ProductID and ProductName like #{1,javaType=String,jdbcType=VARCHAR}</select>

關于#{}的語法問題,相信筆者不用多講大家都清楚。從上面簡單的設置里,我們可以看到源碼里面會找到IntegerTypeHandler和StringTypeHandler類型處理器來設置參數(shù)。類型處理器都是實現(xiàn)于TypeHandler接口,源碼都存放在org.apache.ibatis.type的命名空間下。TypeHandler接口的源碼也很簡單。我們可以看到setParameter方法。顧名思義他就是用于設置參數(shù)。其他的方法都是用于處理回返的結果。如下。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

        		

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式