ibatis遷移到mybatis3的注意事項(xiàng)
DocUpgrade3
這一頁提供了一些當(dāng)你從ibatis遷移到mybatis3時(shí)非常有用的信息。不能保證100%的完整。
這個(gè)項(xiàng)目現(xiàn)在的地址是 Github https://github.com/mybatis/ibatis2mybatis
轉(zhuǎn)換工具
在下載區(qū)有一個(gè)可用的工具,可以幫你將iBATIS 2.x sqlmap文件轉(zhuǎn)換為MyBatis 3.x xml mapper文件。
從這里獲取 http://mybatis.googlecode.com/files/ibatis2mybatis.zip
該工具是一個(gè)封裝在Ant任務(wù)圍繞XSTL轉(zhuǎn)換和一些文字替換,并試圖在復(fù)雜的工作開始之前提供一個(gè)良好的起點(diǎn)。
新的DTDs
新的sqlMapConfig.xml DTD:
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
新的sqlMap (*.map.xml) DTD:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
Configuration配置
配置根節(jié)點(diǎn)從 <sqlMapConfig> 變成 <configuration>
Settings配置
在配置的根節(jié)點(diǎn):
<settings x="y" foo="bar"/>
現(xiàn)在是:
<settings> <setting name="x" value="y"/> <setting name="foo" value="bar"/> </settings>
然后
<settings useStatementNamespaces="true"/>
這個(gè)配置可以刪除掉,因?yàn)槭褂妹臻g已經(jīng)是一個(gè)強(qiáng)制的特性。
<typeAlias>別名
<typeAlias> 必須從 <sqlMap> 元素移動到 <configuration><typeAliases>這里</typeAliases></configuration>
<configuration>
<settings>
...
</settings>
<typeAliases>
<typeAlias ... />
</typeAliases>
</configuration>
<transactionManager> 和<dataSource>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="your.package.CustomDataSourceFactory" />
</transactionManager>
變成:
<environments default="env">
<environment id="env">
<transactionManager type="JDBC">
<property name="commitRequired" value="false"/>
</transactionManager>
<dataSource type="your.package.CustomDataSourceFactory" />
</environment>
</environments>
<sqlMap>
<sqlMap resource=... />
<sqlMap resource=... />
<sqlMap resource=... />
變成:
<mappers> <mapper resource=... /> </mappers>
Mapping
根元素從 <sqlMap> 變成 <mapper>
parameterClass屬性必須改成parameterType
resultClass屬性必須改成resultType
class屬性必須改成type
columnIndex不在<result> 標(biāo)簽中使用
groupBy屬性已經(jīng)被廢棄。下面是一個(gè) 2.x sqlMap的groupBy 例子:
<resultMap id="productRM" class="product" groupBy="id"> <result property="id" column="product_id"/> <result property="name" column="product_name"/> <result property="category" column="product_category"/> <result property="subProducts" resultMap="Products.subProductsRM"/> </resultMap>
新的:
<resultMap id="productRM" type="product" > <id property="id" column="product "/> <result property="name " column="product_name "/> <result property="category " column="product_category "/> <collection property="subProducts" resultMap="Products.subProductsRM"/> </resultMap>
Nested resultMaps嵌套的resultMaps
現(xiàn)在需要使用<association> 標(biāo)簽指定.
<resultMap ...> <result property="client" resultMap="Client.clientRM"/> ... </resultMap>
需要改成:
<resultMap ...> <association property="client" resultMap="Client.clientRM"/> ... </resultMap>
<parameterMap>
雖然這個(gè)標(biāo)簽被廢棄了,但是他仍然可以在iBatis 2中使用。但是對3.0.3以上版本當(dāng)使用type="map"時(shí)有一個(gè)bug,并不指定 javaType 參數(shù)。這將導(dǎo)致:
There is no getter for property named '...' in 'interface java.util.Map'
這將會在MyBatis 3.0.4中解決,對3.0.3版本或更早的版本解決的方法是顯示的指定javaType
Inline parameters內(nèi)聯(lián)參數(shù) #value#
需要改成:
#{value}
jdbcType changes jdbcType變化
jdbcType="ORACLECURSOR"
需要改成:
jdbcType="CURSOR"
還有
jdbcType="NUMBER"
需要改成:
jdbcType="NUMERIC"
Stored procedures存儲過程
<procedure> 存儲過程的標(biāo)簽已經(jīng)不存在了,需要使用 <select>, <insert> 或 <update>標(biāo)簽。
<procedure id="getValues" parameterMap="getValuesPM">
{ ? = call pkgExample.getValues(p_id => ?) }
</procedure>
需要改成:
<select id="getValues" parameterMap="getValuesPM" statementType="CALLABLE">
{ ? = call pkgExample.getValues(p_id => ?)}
</select>
如果你調(diào)用一個(gè)insert的帶返回值的存儲過程,你可以使用<select>標(biāo)簽代替<insert>,但是你需要設(shè)置specifyuseCache="false" 和flushCache="true",你還必須做一個(gè)強(qiáng)制提交(事務(wù))。
對返回?cái)?shù)據(jù)集的存儲過程,當(dāng)使用嵌套的resultMap時(shí),這兒有一個(gè)bug (例如:出參resultMap包含一個(gè)<association> 標(biāo)簽). 只要問題沒有解決,你必須自己將resultMap定義好,或者嵌套的內(nèi)容不會被填充。
Caching緩存
<cacheModel id="myCache" type="LRU"> <flushInterval hours="24"/> <property name="size" value="100" /> </cacheModel>
需要改為:
<cache flushInterval="86400000" eviction="LRU"/>
注意:你可以忽略eviction="LRU",因?yàn)樗悄J(rèn)值。.
<flushOnExecute> 標(biāo)簽被flushCache屬性所替代。緩存默認(rèn)會被所有的查詢語句使用。
Dynamic SQL動態(tài)SQL
在我的項(xiàng)目中最常用的的動態(tài)SQL是isNotNull. 下面是替換正則表達(dá)式的示例:
正則表達(dá)式:
<isNotNull.*?property=\"(.*?)\"> </isNotNull>
需要改為:
<if test="$1 != null"> </if>
isEqual最常用,你可以使用類似的<if> 標(biāo)簽替代.
SqlMapClient
這個(gè)類已經(jīng)不存在了,使用SqlSessionFactory替代 (詳細(xì)內(nèi)容看Mybatis文檔).
Custom type handler
用 TypeHandler 替換接口 TypeHandlerCallback。它具有稍有不同,但方法類似。
Custom data source factory
舊的接口:
com.ibatis.sqlmap.engine.datasource.DataSourceFactory
新的接口:
org.apache.ibatis.datasource.DataSourceFactory
替換下面的方法
public void initialize(Map properties)
為:
public void setProperties(Properties props)
總結(jié)
以上所述是小編給大家介紹的ibatis遷移到mybatis3的注意事項(xiàng),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- struts2+spring+ibatis框架整合實(shí)現(xiàn)增刪改查
- 在Spring使用iBatis及配置講解
- ibatis結(jié)合oracle批量插入三種方法的測評
- java~springboot~ibatis數(shù)組in查詢的實(shí)現(xiàn)方法
- 通過ibatis解決sql注入問題
- ibatis學(xué)習(xí)之搭建Java項(xiàng)目
- Mybatis報(bào)錯(cuò): org.apache.ibatis.exceptions.PersistenceException解決辦法
- Mybatis與Ibatis的區(qū)別
- Ibatis配置xml文件CDATA使用方法詳解
相關(guān)文章
IDEA2021.2永久激活碼最新超詳細(xì)(激活到2099)
這篇文章主要介紹了IDEA2021.2永久激活碼,是idea2021版最新激活方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Java反射與Fastjson的危險(xiǎn)反序列化詳解
在?Java?中,Computer.class是一個(gè)引用,它表示了?Computer?的字節(jié)碼對象(Class對象),這個(gè)對象被廣泛應(yīng)用于反射、序列化等操作中,那么為什么?parseObject?需要這個(gè)引用呢,帶著這個(gè)問題我們一起通過本文學(xué)習(xí)下吧2024-07-07
Spring Boot中使用Server-Sent Events (SSE) 實(shí)
Server-Sent Events (SSE) 是HTML5引入的一種輕量級的服務(wù)器向?yàn)g覽器客戶端單向推送實(shí)時(shí)數(shù)據(jù)的技術(shù),本文主要介紹了Spring Boot中使用Server-Sent Events (SSE) 實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送教程,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Java使用DFA算法實(shí)現(xiàn)敏感詞過濾的示例代碼
很多項(xiàng)目中都會有一個(gè)敏感詞管理模塊,本文主要介紹了Java使用DFA算法實(shí)現(xiàn)敏感詞過濾的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之小區(qū)物業(yè)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)小區(qū)物業(yè)管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
java比較器Comparable接口與Comaprator接口的深入分析
本篇文章是對java比較器Comparable接口與Comaprator接口進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

