当前位置: 移动技术网 > IT编程>开发语言>Java > ibatis迁移到mybatis3的注意事项

ibatis迁移到mybatis3的注意事项

2019年07月19日  | 移动技术网IT编程  | 我要评论

施丹丽,英文版电影,在线算命免费

docupgrade3 

这一页提供了一些当你从ibatis迁移到mybatis3时非常有用的信息。不能保证100%的完整。

这个项目现在的地址是 github 

转换工具

在下载区有一个可用的工具,可以帮你将ibatis 2.x sqlmap文件转换为mybatis 3.x xml mapper文件。

从这里获取 

该工具是一个封装在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="cursor"

还有

jdbctype="number"

需要改成:

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

替换下面的方法

public void initialize(map properties)

为:

public void setproperties(properties props)

总结

以上所述是小编给大家介绍的ibatis迁移到mybatis3的注意事项,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网