以下将介绍 从Ibatis2.X 升级到 Ibatis3.0 配置文件的升级,这仅仅是一个初步的修改意见,我已经决定并开始移植工作,

我没有很多的时间去测试它,所以目前我不能保证他完全正确,但是我会通过你们的建议让他逐步的完善准确.

新的 sqlMapConfig.xml DTD:

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

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

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD iBatis Mapper 3.0 //EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
Configuration XML 变化:
1、根节点标签 由 <sqlMapConfig>  更改为  <configuration>
2、<settings x="y" foo="bar"/>  更改为如下写法

<settings>

    <setting name="x" value="y"/>

    <setting name="foo" value="bar"/>

</settings>

3、<typeAlias> 标签必须从 <sqlMap> 节点移动到 <configuration><typeAliases></typeAliases></configuration> 内

如下示例:

<configuration>
	<settings>
	...
	</settings>
	<typeAliases>
		<typeAlias ... />
	</typeAliases>
</configuration>
 
Mapping XML 变化

1、根节点由 <sqlMap>  更改为 <mapper>

2、属性 parameterClass 必须更改为 parameterType

3、属性 resultClass 必须更改为 resultType

4、属性 class 必须更改为 type

5、"groupBy" 属性已经删除.

在Ibatis2.X 时候,groupBy 使用方式如下

<resultMap id="productRM" type="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>

在3.0中使用方式如下:

<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>

其他的变更对比如下:

Ibatis2.X:

<resultMap id="invoiceRM" type="invoice" extends="Invoice.abstractInvoiceRM">
	<result property="client" resultMap="Client.clientRM"/>
	<result property="accounts" column="invoiceNumber=INVOICE_NUMBER" select="Invoice.getAccountsSql"/>
	<result property="products" column="productGroup=PRODUCT_GROUP_ID" select="Invoice.getProductsSql"/>
</resultMap>

Ibatis3.0:

<resultMap id="agreementDetailRM" type="agreement" extends="Agreement.agreementRM">
	<association property="client" resultMap="Agreement.clientRM"/>
	<collection property="accounts" column="agreementNumber=AGREEMENT_NUMBER" select="Agreement.getAccountsSql"/>
	<collection property="products" column="serviceGroupId=SERVICE_GROUP_ID" select="Agreement.getProductsSql"/>
</resultMap>

上面的示例中 id被定义在父 result map 中.

Dynamic SQL 的变化:

项目中最经常使用的动态语句是 "isNotNull". 此处将给出一个替代的方案:

比如下面的写法:

<isNotNull.*?property=\"(.*?)\"

可以这样写:

<if test="$1 != null"
注意:如果使用了<if ..> 关闭标签也必须由</isNotNull> 更改为</if>
 
原文地址:http://opensource.atlassian.com/confluence/oss/display/IBATIS/Porting+sqlMapConfig+and+sqlMap+XML+from+2.x+to+3.0