ibatis遷移到mybatis3的注意事項(xiàng)
DocUpgrade3
這一頁(yè)提供了一些當(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ù)雜的工作開(kāi)始之前提供一個(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> 元素移動(dòng)到 <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中使用。但是對(duì)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'
這將會(huì)在MyBatis 3.0.4中解決,對(duì)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存儲(chǔ)過(guò)程
<procedure> 存儲(chǔ)過(guò)程的標(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的帶返回值的存儲(chǔ)過(guò)程,你可以使用<select>標(biāo)簽代替<insert>,但是你需要設(shè)置specifyuseCache="false" 和flushCache="true",你還必須做一個(gè)強(qiáng)制提交(事務(wù))。
對(duì)返回?cái)?shù)據(jù)集的存儲(chǔ)過(guò)程,當(dāng)使用嵌套的resultMap時(shí),這兒有一個(gè)bug (例如:出參resultMap包含一個(gè)<association> 標(biāo)簽). 只要問(wèn)題沒(méi)有解決,你必須自己將resultMap定義好,或者嵌套的內(nèi)容不會(huì)被填充。
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)會(huì)被所有的查詢語(yǔ)句使用。
Dynamic SQL動(dòng)態(tài)SQL
在我的項(xiàng)目中最常用的的動(dò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),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- struts2+spring+ibatis框架整合實(shí)現(xiàn)增刪改查
- 在Spring使用iBatis及配置講解
- ibatis結(jié)合oracle批量插入三種方法的測(cè)評(píng)
- java~springboot~ibatis數(shù)組in查詢的實(shí)現(xiàn)方法
- 通過(guò)ibatis解決sql注入問(wèn)題
- ibatis學(xué)習(xí)之搭建Java項(xiàng)目
- Mybatis報(bào)錯(cuò): org.apache.ibatis.exceptions.PersistenceException解決辦法
- Mybatis與Ibatis的區(qū)別
- Ibatis配置xml文件CDATA使用方法詳解
相關(guān)文章
Spring Boot整合Spring Security的示例代碼
這篇文章主要介紹了Spring Boot整合Spring Security的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用IDEA搭建Hadoop開(kāi)發(fā)環(huán)境的操作步驟(Window10為例)
經(jīng)過(guò)三次重裝,查閱無(wú)數(shù)資料后成功完成hadoop在win10上實(shí)現(xiàn)偽分布式集群,以及IDEA開(kāi)發(fā)環(huán)境的搭建。一步一步跟著本文操作可以避免無(wú)數(shù)天坑2021-07-07
淺談Java中幾種常見(jiàn)的比較器的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇淺談Java中幾種常見(jiàn)的比較器的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟
這篇文章主要介紹了Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E
這篇文章主要給大家介紹了SpringBoot整合FTP實(shí)現(xiàn)文件傳輸?shù)牟襟E,文中的流程步驟和代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11
SpringBoot2.x中management.security.enabled=false無(wú)效的解決
這篇文章主要介紹了SpringBoot2.x中management.security.enabled=false無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

