ibatis2.X升级mybatis3.X之曲径通幽处

这2天公司的一个项目要求升级,从ibatis2升级到mybatis3.0.5版本,小弟感到压力很大。以前都是用hibernate(也不熟练),ibatis没看过,要升级更让我皱起眉毛,但是经理有令不能不行。于是想到了几个方案:

1.spring2.5.6 + mybatis3.0.4.这样的话不用升级spring,而且在google code上有个现成的例子

http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DSample

2.手改,60多个xml文件手改,参照google code的文档:http://code.google.com/p/mybatis/wiki/DocUpgrade3,也

可以看中文翻译版的:http://kb.cnblogs.com/a/1598892/


      了解一些mybatis基础后首先排除了第一个方案,参照mybatis的手册,spring3.0的开发在MyBatis3.0官方发布前就已经结束了,所以要整合2个框架需要通过mybatis-spring.jar。既然怎么都要修改spring的配置还不如一起升级了呢。
      于是我又在iteye和oschina上分别提问,ibatis2.X升级到mybatis除了手改还有别的办法吗。不过大家的答案基本都是只能手改。后来在google code查看文档,发现一个 Conversion Tool,简单阅读提示后发现这是个转换的工具,于是就有了方案3:

 

3.Google code上有个Conversion Tool,可以help you to convert your iBATIS 2.x sqlmap files into MyBatis 3.x  xml mapper files。

1.但是这个工具需要用apache ant来编译,首先要下载http://www.skycn.com/soft/51015.html
2.配置,添加环境变量:假设你解压到了F:\Ant\apache-ant-1.8.1
        新增环境变量: ANT_HOME:F:\Ant\apache-ant-1.8.1 在path后追加:%ANT_HOME%\bin;
3.将需要转换的xml文件方到下载的工具包的source目录下,然后cmd进入这个文件夹,ant即可。

我在执行是一直报错java.net.ConnectException:connection time out
解决办法:
1.如果执行不成功,使用ant -v 查看具体信息。
  Apache resolver library not found, internal resolver will be used
  我遇到的第一个问题是缺少resolver.jar包。下载:http://download.csdn.net/source/3497319,然后导入为了保

证能找到,我同时放到了ant\lib和jre\lib下
2.执行后还是报错,使用ant -d 命令查看debug信息。新的提示信息:
  resolveEntity:"-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"
  ...
  No matching catalog entry found,parser will use:'http://www.ibatis.com/dtd/sql-map-2.dtd'
很明显,需要用的是mybatis-3-config.dtd和mybatis-3-mapper.dtd。进入build查看,没有用错,然后进入source查

看需要转换的xml文档,果然是这里引用了2.dtd而是转换时找不到需要替换的标签而出的问题。
3.修改完这个问题后,ant -d,看到有些编译还是失败了。但是进入destination目录发现mxl文档已经转换完成,像是

class--type,#userName#---#{userName}此类的转换都已经成功。只是对于ibatis的动态SQL不能很好的进行转换,这

些还需要手动修改,但对于60多个XML文档,这已经节省的很多的时间了。

 

 

缺陷:

1.无法解析<<typeAlias >因为Mybatis3要求<typeAlias>要放到sqlMapConfig.xml下

2.无法解析动态SQL

 

你可能感兴趣的:(ibatis升级)