美文网首页
Mybatis中的OGNL使用总结

Mybatis中的OGNL使用总结

作者: 没意思先生1995 | 来源:发表于2018-09-13 22:40 被阅读0次

    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表达式(二)

    相关文章

      网友评论

          本文标题:Mybatis中的OGNL使用总结

          本文链接:https://www.haomeiwen.com/subject/nvzggftx.html