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

本文介绍了一个自定义的OGNL工具类,用于简化MyBatis中的动态SQL编写,特别是针对字符串、集合、数组及映射类型的空值判断。通过使用该工具类,可以在MyBatis的SQL映射文件中更简洁地进行条件判断。

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值