激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - ibatis遷移到mybatis3的注意事項

ibatis遷移到mybatis3的注意事項

2021-01-20 14:21動力節點 Java教程

這篇文章主要介紹了ibatis遷移到mybatis3的注意事項的相關資料,需要的朋友可以參考下

DocUpgrade3 

這一頁提供了一些當你從ibatis遷移到mybatis3時非常有用的信息。不能保證100%的完整。

這個項目現在的地址是 Github https://github.com/mybatis/ibatis2mybatis

轉換工具

在下載區有一個可用的工具,可以幫你將iBATIS 2.x sqlmap文件轉換為MyBatis 3.x xml mapper文件。

從這里獲取 http://mybatis.googlecode.com/files/ibatis2mybatis.zip

該工具是一個封裝在Ant任務圍繞XSTL轉換和一些文字替換,并試圖在復雜的工作開始之前提供一個良好的起點。

新的DTDs

新的sqlMapConfig.xml DTD:

?
1
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

新的sqlMap (*.map.xml) DTD:

?
1
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

Configuration配置

配置根節點從 <sqlMapConfig> 變成 <configuration>

Settings配置

在配置的根節點:

?
1
<settings x="y" foo="bar"/>

現在是:

?
1
2
3
4
<settings>
  <setting name="x" value="y"/>
  <setting name="foo" value="bar"/>
</settings>

然后

?
1
<settings useStatementNamespaces="true"/>

這個配置可以刪除掉,因為使用命名空間已經是一個強制的特性。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

變成:

?
1
2
3
4
5
6
7
8
9
10
11
12
<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=... />

變成:

?
1
2
3
<mappers>
  <mapper resource=... />
</mappers>

Mapping

根元素從 <sqlMap> 變成 <mapper>

parameterClass屬性必須改成parameterType

resultClass屬性必須改成resultType

class屬性必須改成type

columnIndex不在<result> 標簽中使用

groupBy屬性已經被廢棄。下面是一個 2.x sqlMap的groupBy 例子:

?
1
2
3
4
5
6
<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>

新的:

?
1
2
3
4
5
6
<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

現在需要使用<association> 標簽指定.

?
1
2
3
4
<resultMap ...>
  <result property="client" resultMap="Client.clientRM"/>
  ...
</resultMap>

需要改成:

?
1
2
3
4
<resultMap ...>
  <association property="client" resultMap="Client.clientRM"/>
  ...
</resultMap>

<parameterMap>

雖然這個標簽被廢棄了,但是他仍然可以在iBatis 2中使用。但是對3.0.3以上版本當使用type="map"時有一個bug,并不指定 javaType 參數。這將導致:

There is no getter for property named '...' in 'interface java.util.Map'    

這將會在MyBatis 3.0.4中解決,對3.0.3版本或更早的版本解決的方法是顯示的指定javaType

?
1
2
Inline parameters內聯參數
#value#

需要改成:

?
1
2
3
#{value}
jdbcType changes jdbcType變化
jdbcType="ORACLECURSOR"

需要改成:

jdbcType="CURSOR"

還有

jdbcType="NUMBER"

需要改成:

?
1
2
3
4
5
6
jdbcType="NUMERIC"
Stored procedures存儲過程
<procedure> 存儲過程的標簽已經不存在了,需要使用 <select>, <insert> 或 <update>標簽。
<procedure id="getValues" parameterMap="getValuesPM">
  { ? = call pkgExample.getValues(p_id => ?) }
</procedure>

需要改成:

?
1
2
3
<select id="getValues" parameterMap="getValuesPM" statementType="CALLABLE">
  { ? = call pkgExample.getValues(p_id => ?)}
</select>

如果你調用一個insert的帶返回值的存儲過程,你可以使用<select>標簽代替<insert>,但是你需要設置specifyuseCache="false" 和flushCache="true",你還必須做一個強制提交(事務)。

對返回數據集的存儲過程,當使用嵌套的resultMap時,這兒有一個bug  (例如:出參resultMap包含一個<association> 標簽). 只要問題沒有解決,你必須自己將resultMap定義好,或者嵌套的內容不會被填充。

Caching緩存

?
1
2
3
4
<cacheModel id="myCache" type="LRU">
  <flushInterval hours="24"/>
  <property name="size" value="100" />
</cacheModel>

需要改為:

?
1
<cache flushInterval="86400000" eviction="LRU"/>

注意:你可以忽略eviction="LRU",因為他是默認值。.

<flushOnExecute> 標簽被flushCache屬性所替代。緩存默認會被所有的查詢語句使用。

Dynamic SQL動態SQL

在我的項目中最常用的的動態SQL是isNotNull. 下面是替換正則表達式的示例:

正則表達式:

?
1
2
<isNotNull.*?property=\"(.*?)\">
</isNotNull>

需要改為:

?
1
2
<if test="$1 != null">
</if>

isEqual最常用,你可以使用類似的<if> 標簽替代.

SqlMapClient

這個類已經不存在了,使用SqlSessionFactory替代 (詳細內容看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)

總結

以上所述是小編給大家介紹的ibatis遷移到mybatis3的注意事項,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.sina.com.cn/s/blog_9c6852670102wxfq.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91av原创| 污片视频网站 | 欧美人成在线视频 | 亚洲第一页综合 | 久色视频网站 | 欧美扩阴视频 | 射逼网站| 狠狠干精品视频 | 一级免费大片 | 国产一区二区高清在线 | 亚洲男人的天堂在线视频 | 亚洲精品7777xxxx青睐 | 男女做性免费网站 | 欧美日韩精品一区二区三区不卡 | 国产黄色录像片 | 久久成人视屏 | 在线中文字幕观看 | 天堂在线中文资源 | 亚洲最新无码中文字幕久久 | 一级黄色毛片播放 | 涩涩天堂 | 亚洲第一视频在线 | 国产精品亚洲欧美一级在线 | 国产成视频在线观看 | 免费在线观看成人网 | 欧美日韩在线影院 | 搜一级毛片 | 久久国产精品久久精品国产演员表 | av懂色| 国产亚洲综合精品 | 日本一道aⅴ不卡免费播放 久久久久久久高清 | 草操视频 | 亚洲va国产va | 一级毛片在线免费观看 | 国产精品久久久久影院老司 | 羞羞的动漫在线观看 | av在线免费观看网站 | 亚洲福利在线观看视频 | 九九热在线精品视频 | 久久久久久久九九九九 | 久久一区二区三区av |