ibatis遷移到mybatis3的注意事項(xiàng)
DocUpgrade3
這一頁提供了一些當(dāng)你從ibatis遷移到mybatis3時非常有用的信息。不能保證100%的完整。
這個項(xiàng)目現(xiàn)在的地址是 Github https://github.com/mybatis/ibatis2mybatis
轉(zhuǎn)換工具
在下載區(qū)有一個可用的工具,可以幫你將iBATIS 2.x sqlmap文件轉(zhuǎn)換為MyBatis 3.x xml mapper文件。
從這里獲取 http://mybatis.googlecode.com/files/ibatis2mybatis.zip
該工具是一個封裝在Ant任務(wù)圍繞XSTL轉(zhuǎn)換和一些文字替換,并試圖在復(fù)雜的工作開始之前提供一個良好的起點(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"/>
這個配置可以刪除掉,因?yàn)槭褂妹臻g已經(jīng)是一個強(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)被廢棄。下面是一個 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>
雖然這個標(biāo)簽被廢棄了,但是他仍然可以在iBatis 2中使用。但是對3.0.3以上版本當(dāng)使用type="map"時有一個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)用一個insert的帶返回值的存儲過程,你可以使用<select>標(biāo)簽代替<insert>,但是你需要設(shè)置specifyuseCache="false" 和flushCache="true",你還必須做一個強(qiáng)制提交(事務(wù))。
對返回數(shù)據(jù)集的存儲過程,當(dāng)使用嵌套的resultMap時,這兒有一個bug (例如:出參resultMap包含一個<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
這個類已經(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),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(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報錯: org.apache.ibatis.exceptions.PersistenceException解決辦法
- Mybatis與Ibatis的區(qū)別
- Ibatis配置xml文件CDATA使用方法詳解
相關(guān)文章
Spring Boot整合Spring Security的示例代碼
這篇文章主要介紹了Spring Boot整合Spring Security的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04使用IDEA搭建Hadoop開發(fā)環(huán)境的操作步驟(Window10為例)
經(jīng)過三次重裝,查閱無數(shù)資料后成功完成hadoop在win10上實(shí)現(xiàn)偽分布式集群,以及IDEA開發(fā)環(huán)境的搭建。一步一步跟著本文操作可以避免無數(shù)天坑2021-07-07淺談Java中幾種常見的比較器的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄獪\談Java中幾種常見的比較器的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟
這篇文章主要介紹了Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E
這篇文章主要給大家介紹了SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E,文中的流程步驟和代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11SpringBoot2.x中management.security.enabled=false無效的解決
這篇文章主要介紹了SpringBoot2.x中management.security.enabled=false無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07