Mybatis中的OGNL使用总结

2018-09-13  本文已影响0人  没意思先生1995

Mybatis中的OGNL使用总结

Mybatis中常用的OGNL表达式有以下:

e1 or e2

e1 and e2

e1 == e2,e1 eq e2

e1 != e2,e1 neq e2

e1 lt e2:小于

e1 lte e2:小于等于,其他gt(大于),gte(大于等于)

e1 in e2

e1 not in e2

e1 + e2,e1 * e2,e1/e2,e1 - e2,e1%e2

!e,not e:非,求反

e.method(args)调用对象方法

e.property对象属性值

e1[ e2 ]按索引取值,List,数组和Map

@class@method(args)调用类的静态方法

@class@field调用类的静态字段值

在一定意义上说,mybatis中的动态sql也是基于OGNL表达式的。其中常用的元素有如下几种:

    if
    choose(when,otherwise)
    trim
    where
    set
    foreach

OGNL在mybatis中的应用,主要有两种:

OGNL的调用静态方法的示例:

<select id="getRecentQuestionTitle" parameterType="java.lang.String" resultType="java.lang.String">  
        select title from song_question where questionState = #{value}   
        <if test="@Ognl@isSolve(value[0],0)">  
        order by questionTime desc   
        </if>  
        <if test="@Ognl@isSolve(value[0],1)">  
        order by answerTime desc   
        </if>                
        limit 0,1  
</select>  

静态方法如下:

public static boolean isSolve(Object o,String soleState){  
    if(o == null)  
        return false;  
    String str = null;  
    if(o instanceof String[]){  
        String[]objects = (String[])o;  
        str = objects[0];  
    }else if(o instanceof Character){  
        Character c = (Character) o;  
        str =  Character.toString(c);  
    }  
        if(StringUtils.equals(str, soleState))  
            return true;  
    return false;  
      
}  

如果值为0,则order by questionTime desc 根据字段questionTime排序。
如果值为1,则order by answerTime desc根据字段answerTime排序。


Mybatis中的OGNL表达式(一) Mybatis中的OGNL表达式(二)
上一篇下一篇

猜你喜欢

热点阅读