下面是ibatis迁移到mybatis3的注意事项的完整攻略:
1. 概览
iBATIS作为一个成熟的ORM框架,已经成为本质上与 MyBatis 这个极受欢迎的 ORM 框架的母版。iBATIS 的成功导致了 MyBatis 的产生,MyBatis 与 iBATIS 必然有很多相似之处,包括映射文件、参数映射、参数验证等等。iBATIS 迁移到 MyBatis3 的过程似乎要比起独立使用 MyBatis3 更加困难,但从功能上来讲,成果却是值得的。下面我会提到某些明显的不同之处和步骤。
2. 重写iBATIS项目
为了将 iBATIS 项目移动到 MyBatis3,你自然需要对你已经编写的程序进行一些改动。以下是一些需要注意的关键点。
- 对于大多数的简单查询,直接使用 MyBatis3 的简单方法:selectOne、selectList 和 selectMap。
- 对于下拉列表框等选择字段,使用 MyBatis3 的 EnumTypeHandler,你需要适当地使用预处理。
- 在 SQL 中需要转义或者是通过 XML 将 SQL 片段引入中时,比起 iBATIS, MyBatis3 要更严格。为此,你需要将 XML 片段包含在 CDATA 节点中。
- 如果你需要使用复杂的 SQL,你需要使用 MyBatis3 的动态 SQL 功能。
3. 更改映射文件
MyBatis3 和 iBATIS 的映射文件结构差不多,但是 MyBatis3 支持更多的功能和特点。下面是 MyBatis3 的映射文件的特点:
- insert、select、update 和 delete 元素中必须有 id 属性。
- MyBatis3 的 SQL 语句是通过预编译 Statement 实现的。因此,在 SQL 语句和参数之间使用 #{},处理两个冒号(:)进行统治。
- MyBatis3的映射文件不支持com.ibatis.sqlmap.engine.mapping.statement.CachingStatement 将结果存储在缓存中。取而代之的是cache 元素。
下面的例子展示了iBATIS语句如何转换为MyBatis3语句:
以前的代码:
<select id="selectPersonById" parameterClass="java.lang.Integer"
resultClass="test.ibatis.Person">
SELECT * FROM person WHERE id = ?;
</select>
更新后的代码:
<select id="selectPersonById" parameterType="java.lang.Integer"
resultType="test.ibatis.Person">
SELECT * FROM person WHERE id = #{id};
</select>
4. 迁移DAO实现
MyBatis3 和 iBATIS 的 DAO 接口是一致的。但是,使用 MyBatis3 时,你需要将方法头改为与 MyBatis 3 相适合的头。例如,对于 Java 8 Lambda,你可以使用 @MapKey 和 @Param 注释。
下面的例子展示了 iBATIS DAO 方法的转换:
以前的代码:
public void insertPerson(Person person) throws Exception {
sqlMapClient.insert("insertPerson", person);
}
更新后的代码:
@Insert("INSERT INTO person(id,name) VALUES (#{id},#{name})")
void insertPerson(@Param("id") Integer id,
@Param("name") String name);
5. 写下感想
通过这篇攻略,我们学习了迁移 iBATIS 项目到 MyBatis3 的重要任务。需要注意的一些关键点和步骤都已经在上文中介绍到了。不过,实际上这项工作还需要很多有经验的开发工程师来完成,所以我们希望这篇攻略的贡献能够为他们提供很好的帮助,为希望学习 iBATIS 和 MyBatis3 的其他全栈开发工程师提供至少基础知识。
我希望这篇文章能帮助你迁移 iBATIS 项目到 MyBatis3。如果你有疑问或者其他方面的建议,请在评论区留下你们的 suggestion。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ibatis迁移到mybatis3的注意事项 - Python技术站