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: <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 新的sqlMap (*.map.xml) DTD: <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> Configuration配置 配置根节点从 <sqlMapConfig> 变成 <configuration> Settings配置 在配置的根节点: <settings x="y" foo="bar"/> 现在是: <settings> <setting name="x" value="y"/> <setting name="foo" value="bar"/> </settings> 然后 <settings useStatementNamespaces="true"/> 这个配置可以删除掉,因为使用命名空间已经是一个强制的特性。 <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> 变成: <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=... /> 变成: <mappers> <mapper resource=... /> </mappers> Mapping 根元素从 <sqlMap> 变成 <mapper> parameterClass属性必须改成parameterType resultClass属性必须改成resultType class属性必须改成type columnIndex不在<result> 标签中使用 groupBy属性已经被废弃。下面是一个 2.x sqlMap的groupBy 例子: <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> 新的: <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> 标签指定. <resultMap ...> <result property="client" resultMap="Client.clientRM"/> ... </resultMap> 需要改成: <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 Inline parameters内联参数 #value# 需要改成: #{value} jdbcType changes jdbcType变化 jdbcType="ORACLECURSOR" 需要改成:
还有
需要改成: jdbcType="NUMERIC" Stored procedures存储过程 <procedure> 存储过程的标签已经不存在了,需要使用 <select>,<insert> 或 <update>标签。 <procedure id="getValues" parameterMap="getValuesPM"> { ? = call pkgExample.getValues(p_id => ?) } </procedure> 需要改成: <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缓存 <cacheModel id="myCache" type="LRU"> <flushInterval hours="24"/> <property name="size" value="100" /> </cacheModel> 需要改为: <cache flushInterval="86400000" eviction="LRU"/> 注意:你可以忽略eviction="LRU",因为他是默认值。. <flushOnExecute> 标签被flushCache属性所替代。缓存默认会被所有的查询语句使用。 Dynamic SQL动态SQL 在我的项目中最常用的的动态SQL是isNotNull. 下面是替换正则表达式的示例: 正则表达式: <isNotNull.*?property="(.*?)"> </isNotNull> 需要改为: <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 替换下面的方法
为:
总结 以上所述是小编给大家介绍的ibatis迁移到mybatis3的注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |