到:無論是 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ù)。其他的方法都是用于處理回返的結果。如下。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26