java相关:ibatis迁移到mybatis3的注意事项
发布于 2020-8-14|
复制链接
摘记: DocUpgrade3 这一页提供了一些当你从ibatis迁移到mybatis3时非常有用的信息。不能保证100%的完整。这个项目现在的地址是 Github ..
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:
```java
```
新的sqlMap (*.map.xml) DTD:
```java
```
Configuration配置配置根节点从 变成 Settings配置在配置的根节点:
```java
```
现在是:
```java
```
然后
```java
```
这个配置可以删除掉,因为使用命名空间已经是一个强制的特性。
```java
别名
必须从 元素移动到 这里
...
和
```
变成:
```java
```
变成:
```java
```
Mapping根元素从 变成 parameterClass属性必须改成parameterTyperesultClass属性必须改成resultTypeclass属性必须改成typecolumnIndex不在 标签中使用groupBy属性已经被废弃。下面是一个 2.x sqlMap的groupBy 例子:
```java
```
新的:
```java
```
Nested resultMaps嵌套的resultMaps现在需要使用 标签指定.
```java
...
```
需要改成:
```java
...
```
虽然这个标签被废弃了,但是他仍然可以在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
```bash
Inline parameters内联参数
#value#
```
需要改成:
```bash
#{value}
jdbcType changes jdbcType变化
jdbcType="ORACLECURSOR"
```
需要改成:
jdbcType="CURSOR"
还有
jdbcType="NUMBER"
需要改成:
```bash
jdbcType="NUMERIC"
Stored procedures存储过程
存储过程的标签已经不存在了,需要使用 , 或 标签。
{ ? = call pkgExample.getValues(p_id => ?) }
```
需要改成:
```bash
{ ? = call pkgExample.getValues(p_id => ?)}
```
如果你调用一个insert的带返回值的存储过程,你可以使用标签代替,但是你需要设置specifyuseCache="false" 和flushCache="true",你还必须做一个强制提交(事务)。
对返回数据集的存储过程,当使用嵌套的resultMap时,这儿有一个bug (例如:出参resultMap包含一个 标签). 只要问题没有解决,你必须自己将resultMap定义好,或者嵌套的内容不会被填充。
Caching缓存
```bash
```
需要改为:
```bash
```
注意:你可以忽略eviction="LRU",因为他是默认值。.
标签被flushCache属性所替代。缓存默认会被所有的查询语句使用。
Dynamic SQL动态SQL
在我的项目中最常用的的动态SQL是isNotNull. 下面是替换正则表达式的示例:
正则表达式:
```java
```
需要改为:
```bash
```
isEqual最常用,你可以使用类似的 标签替代.
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)
为: