1.编写Ognl类
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
/**
* @author:Pionner17
* @date: 2017/9/10 22:56
* @email:selectedwang@163.com
* @phone: 17600903381
* @motto: make a little progress every day!
* @params: * Ognl工具类,主要是为了在ognl表达式访问静态方法时可以减少长长的类名称编写
* Ognl访问静态方法的表达式为: @class@method(args)
*/
public class Ognl {
/**
* 可以用于判断String,Map,Collection,Array是否为空
* @param o
* @return
*/
public static boolean isEmpty(Object o) throws IllegalArgumentException {
if(o == null) return true;
if(o instanceof String) {
if(((String)o).length() == 0){
return true;
}
} else if(o instanceof Collection) {
if(((Collection)o).isEmpty()){
return true;
}
} else if(o.getClass().isArray()) {
if(Array.getLength(o) == 0){
return true;
}
} else if(o instanceof Map) {
if(((Map)o).isEmpty()){
return true;
}
}else {
return false;
// throw new IllegalArgumentException("Illegal argument type,must be : Map,Collection,Array,String. but was:"+o.getClass());
}
return false;
}
/**
* 可以用于判断 Map,Collection,String,Array是否不为空
* @param c
* @return
*/
public static boolean isNotEmpty(Object o) {
return !isEmpty(o);
}
public static boolean isNotBlank(Object o) {
return !isBlank(o);
}
public static boolean isNumber(Object o) {
if(o == null) return false;
if(o instanceof Number) {
return true;
}
if(o instanceof String) {
String str = (String)o;
if(str.length() == 0) return false;
if(str.trim().length() == 0) return false;
return org.apache.commons.lang.StringUtils.isNumeric(str);
}
return false;
}
public static boolean isBlank(Object o) {
if(o == null)
return true;
if(o instanceof String) {
String str = (String)o;
return isBlank(str);
}
return false;
}
public static boolean isBlank(String str) {
if(str == null || str.length() == 0) {
return true;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isWhitespace(str.charAt(i))) {
return false;
}
}
return true;
}
}
2.利用Ognl动态判断if
<select id="getUserList" parameterType="Map" resultMap="result_User_Map">
select <include refid="user_Column" /> from user
<where>
<if test="@Ognl@isNotEmpty(id)">
and ID = #{id}
</if>
<if test="@Ognl@isNotEmpty(username)">
and USERNAME = #{username}
</if>
</where>
</select>注意:Ognl类必须放在与包名同级的文件夹下
本文介绍了一个自定义的OGNL工具类,用于简化MyBatis中的动态SQL编写,特别是针对字符串、集合、数组及映射类型的空值判断。通过使用该工具类,可以在MyBatis的SQL映射文件中更简洁地进行条件判断。

588

被折叠的 条评论
为什么被折叠?



