<selectid="mapBeanMap"parameterClass="map"resultClass="int">
select count(ACC_ID) from Account where ACC_ID in (#bean.map.id#,#accounts[0].id#,#accounts[1].id#)
</select>
<selectid="mapBeanMap2"parameterClass="map"resultClass="int">
select count(ACC_ID) from Account where ACC_ID in
<iterateclose=")"open="("conjunction=","property="bean.map.accounts">
#bean.map.accounts[].id#
</iterate></select>
ibatis与泛型
当使用复杂配置并且参数带有泛型的时候,使用比较标签有可能导致如下错误:There is no READABLE property named ‘XXX’ in class ‘java.lang.Object’.这是因为进行比较的时候,ibatis是通过反射获取类型而不是先计算值的,这样泛型的时候会获取到Object类而不能得到真实的类型,自己简单打个补丁先:
Index: src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
===================================================================
--- src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java (revision 1079874)
+++ src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java (working copy)
@@ -72,14 +72,13 @@
if (prop != null) {
value1 = PROBE.getObject(parameterObject, prop);
- type = PROBE.getPropertyTypeForGetter(parameterObject, prop);
} else {
value1 = parameterObject;
- if (value1 != null) {
- type = parameterObject.getClass();
- } else {
- type = Object.class;
- }
+ }
+ if (value1 != null) {
+ type = value1.getClass();
+ } else {
+ type = Object.class;
}
if (comparePropertyName != null) {
Object value2 = PROBE.getObject(parameterObject, comparePropertyName);
Exception is caught when Exception is not thrown 这个findbugs问题在系统出现非常多,也是最难处理的问题。从这个点
就可以看出系统实现非常混乱,本来属于不同抽象层次的代码都堆在一起了,没有层次之分。这个问题一般是需要修改到那段逻辑的时候才会去
解决,通过抽取方法/类的方式,把异常进行抽象化,最后借助框架层次上的异常统一处理逻辑就通常可以把Action上面的所有的try-catch干掉。