在mybatis的sqlMapper中使用Ognl判断动态sql语句

来源:互联网 发布:网络购物合同纠纷 编辑:程序博客网 时间:2024/06/05 19:09

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类必须放在与包名同级的文件夹下


原创粉丝点击