在mybatis的sqlMapper中使用Ognl判斷動態sql語句
阿新 • • 發佈:2019-01-14
1.編寫Ognl類
import java.lang.reflect.Array; import java.util.Collection; import java.util.Map; /** * @author:Pionner17 * @date: 2017/9/10 22:56 * @email:[email protected] * @phone: 17600903381 * @motto: make a little progress every day! * @params: * Ognl工具類,主要是為了在ognl表示式訪問靜態方法時可以減少長長的類名稱編寫 * Ognl訪問靜態方法的表示式為: @
[email protected](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="@[email protected](id)">
and ID = #{id}
</if>
<if test="@ [email protected](username)">
and USERNAME = #{username}
</if>
</where>
</select>
注意:Ognl類必須放在與包名同級的資料夾下