在我们开发过程中用 Mybatis 经常会用到下面的例子
Mapper如下
Map<String ,String > testArray(@Param("array") String [] array);
XMl中的sql如下
<select id="testArray" resultType="map">
select * from t_ams_ac_pmt_dtl where cpt_pro=#{
cptProp}
<if test="array!=null and array != '' ">
and cpt_pro=#{
cptProp}
</if>
</select>
刚看上面的代码会觉得数组怎么能和空字符串进行一起比较呢,一开始会觉得这个代码运行起来绝对报错,但是写单元测试运行了一遍发现成功运行了。因此想是不是 Mybatis 在内部对数组类型的数据进行了封装。于是有了这一次的源码解析之旅。上网查了查发现 Mybatis 解析使用了 OGNL 。至于什么是 OGNL 摘抄了百度百科中的一段话
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。
单元测试类如下