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:

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

 

Configuration配置

  • 配置根节点从  变成 

Settings配置

在配置的根节点:

 x="y" foo="bar"/>

现在是:


     name="x" value="y"/>
     name="foo" value="bar"/>

然后

 useStatementNamespaces="true"/>

这个配置可以删除掉,因为使用命名空间已经是一个强制的特性。

别名

 必须从  元素移动到 这里


    
    ...
    
    
         ... />
    

 和

 type="JDBC" commitRequired="false">
     type="your.package.CustomDataSourceFactory" />

变成:

 default="env">
     id="env">
         type="JDBC">
             name="commitRequired" value="false"/>
        
         type="your.package.CustomDataSourceFactory" />
    

 resource=... />
 resource=... />
 resource=... />

变成:


     resource=... />

Mapping

  • 根元素从  变成 
  • parameterClass属性必须改成parameterType
  • resultClass属性必须改成resultType
  • class属性必须改成type
  • columnIndex不在 标签中使用
  • groupBy属性已经被废弃。下面是一个 2.x sqlMap的groupBy 例子:

 id="productRM" class="product" groupBy="id">
     property="id" column="product_id"/>
     property="name" column="product_name"/>
     property="category" column="product_category"/>
     property="subProducts" resultMap="Products.subProductsRM"/>

新的:

 id="productRM" type="product" >
     property="id" column="product "/>
     property="name " column="product_name "/>
     property="category " column="product_category "/>
     property="subProducts" resultMap="Products.subProductsRM"/>

Nested resultMaps嵌套的resultMaps

现在需要使用 标签指定.

 ...>
     property="client" resultMap="Client.clientRM"/>
    ...

需要改成:

 ...>
     property="client" resultMap="Client.clientRM"/>
    ...

虽然这个标签被废弃了,但是他仍然可以在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

Inline parameters内联参数

#value#

需要改成:

#{value}

jdbcType changes jdbcType变化

jdbcType="ORACLECURSOR"

需要改成:

jdbcType="CURSOR"

还有

jdbcType="NUMBER"

需要改成:

jdbcType="NUMERIC"

Stored procedures存储过程

  •  存储过程的标签已经不存在了,需要使用 
    如果你调用一个insert的带返回值的存储过程,你可以使用