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转换和一些文字替换,并试图在复杂的工作开始之前提供一个良好的起点。
新的sqlMapConfig.xml DTD:
新的sqlMap (*.map.xml) DTD:
在配置的根节点:
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=... />
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"/>
现在需要使用
...>
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
#value#
需要改成:
#{value}
jdbcType="ORACLECURSOR"
需要改成:
jdbcType="CURSOR"
还有
jdbcType="NUMBER"
需要改成:
jdbcType="NUMERIC"
id="getValues" parameterMap="getValuesPM">
{ ? = call pkgExample.getValues(p_id => ?) }
需要改成:
如果你调用一个insert的带返回值的存储过程,你可以使用
id="myCache" type="LRU">
hours="24"/>
name="size" value="100" />
需要改为:
flushInterval="86400000" eviction="LRU"/>
注意:你可以忽略eviction="LRU",因为他是默认值。.
在我的项目中最常用的的动态SQL是isNotNull. 下面是替换正则表达式的示例:
正则表达式:
.*?property=\"(.*?)\">
需要改为:
test="$1 != null">
isEqual最常用,你可以使用类似的
旧的接口:
com.ibatis.sqlmap.engine.datasource.DataSourceFactory
新的接口:
org.apache.ibatis.datasource.DataSourceFactory
替换下面的方法
public void initialize(Map properties)
为:
public void setProperties(Properties props)
原文地址:https://code.google.com/p/mybatis/wiki/DocUpgrade3