ibatis3的设计相对ibatis2来说改动较大,可以说是在功能和配置继承的基础上翻天覆地的修改,所以:你别指望2个版本是自动兼容的。暴露了更多底层的接口和添加Dynamic SQL的功能提升了其拓展性,但是添加Annotation的功能却是鸡肋。相关的功能点我们还是看看这张图先。
新功能点
1:Dynamic SQL:动态SQL对熟悉JSTL或基于xml的文本处理的程序员来说是很好理解的,采用了基于OGNL的表达式后更是让XML mapper的配置减少到原来的一半。示例代码如下:
<select id=”findActiveBlogWithTitleLike” parameterType=”Blog” resultType=”Blog”>
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test=”title != null”>
AND title like #{title}
</if>
</select>
2:Maper Annotations:这个功能比较鸡肋,至少偶是这样认为。程序员在代码中写sql,这个给人的感觉是回到了jdbc的环境中,而且 Annotaciton和java代码高度耦合了,并非配置优先。
3:SelectBuilder:用java代码来写sql,它使用static import和ThreadLocal变量的方式来保证语法的简介,很容易的去处理交织的条件和SQL格式化。
public String selectBlogsSql() {
BEGIN(); // Clears ThreadLocal variable
SELECT("*");
FROM("BLOG");
return SQL();
}
表达的结果是:select * from blog;
4:暴露底层接口:ibatis可以通过实现一些接口来拦截执行某些特定的功能点,默认情况下有4种:
* Executor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
* ParameterHandler(getParameterObject, setParameters)
* ResultSetHandler(handleResultSets, handleOutputParameters)
* StatementHandler(prepare, parameterize, batch, update, query)
具体的实例请看:ibatis user guide
对入门者的建议:
一些问题:
资源: