美文网首页
mybatis-notes:OGNL-mybatis的标签语法与

mybatis-notes:OGNL-mybatis的标签语法与

作者: 09c72470861c | 来源:发表于2018-07-26 00:05 被阅读0次

1. 初步认识一蛤OGNL

OGNL,Object Graph Navigation Language,是一种强大的表达式语言,网上搜索这个概念,多是和structs有关的。但是在mybatis中OGNL应用很广的。

2. 常用的标签

毕竟初学,简单地用了几次,根据自己实操和网上大佬介绍,大概以下几种标签比较常用:

  • if
  • where
  • bind
  • foreach
  • choose
  • when
  • otherwise
  • trim

通过这些标签都可以根据具体业务组合起来使用,但在本文中只作简单示例。

3. 应用案例

1. <where>、<if>的使用

本条语句的sql中,只要满足条件的sql都会拼接上去。

    <!-- 使用where标签实现查询 -->
    <select id="findStudentList1" resultType="Student"
        parameterType="Student">
        select * from student
        <where>
            <if test="id > 0">id=#{id}</if>
            <if test="stu_name !=null and stu_name.length()>0">and stu_name=#{stu_name}</if>
            <if test="age != null">and stu_age=#{age}</if>
        </where>
    </select>
2. <choose>、<when>、<otherwise>的使用

本条语句其实完全可以看成switch、case、default,按顺序执行下来,只要满足了一个条件,那么将sql拼接上去并直接跳出这条拼接语句,类似于break

    <!-- 用choose实现sql动态查询 -->
    <select id="findStudentList2" resultType="Student"  parameterType="Student" resultMap="age">
        select * from student where
        <choose>
            <when test="id > 0">id=#{id}</when>
            <when test="stu_name !=null and stu_name.length()>0">stu_name=#{stu_name}</when>
            <when test="age > 0">stu_age=#{age}</when>
            <otherwise></otherwise>
        </choose>
    </select>
3. <foreach>的使用

<foreach>多用于select xx from table where xxx in(---,---,---,),<foreach>的作用在于将传过来的值遍历到 in 的条件中。(下文中的<resultmap>可以忽略它,是我写的实体类和表字段不匹配的锅)

    <!-- foreach实现in查询 -->
    <select id="findStudentList3" parameterType="map" resultMap="age">
        select * from student where id in
        <foreach collection="stuList" index="ind" item="ite" open="(" separator="," close=")">
            #{ite}
        </foreach>
    </select>
    <resultMap id="age" type="Student">
        <result column="stu_age" property="age" />
    </resultMap>

值得注意的是这里有个坑,collection中能解析的只能是array(数组)或List,具体坑长什么样可以点击查看坑长啥样

4. <trim>的使用

mybatis trim标签的使用 :
trim 属性:
prefix:前缀
suffix:后缀
prefixOverrides:忽略第一个指定分隔符
suffixOverrides:忽略最后一个分隔符

    <!-- trim实现修改 -->   
    <update id="editStudent1" parameterType="Student">
        update student
        <trim prefix="set" suffixOverrides="," suffix="where id=#{id}">

            <if test="stu_name !=null and stu_name.length()>0">stu_name=#{stu_name}</if>
            <if test="age > 0">stu_age=#{age}</if>

        </trim>
    </update>

一条正常的update语句一般长这样:
update user set name = 'asd',age = 18,sex='man' where id = 1
而在mybatis的sql动态拼接的时候,只用先写update user,后面的部分就需要拼接了;

  • 首先前缀(prefix)为set先拼接上去,配置为prefix="set"

这里有一点要知道,如果拼接的字段为第一条,那么前面不加and;如果拼接的字段为末条,那么最后不加“,”号,在set条件中不存在and,所以这个可以暂且不考虑,那么只用考虑“,”号。

  • 所以其次就是拼接哪些字段需要修改,要去掉最后一条的“,”号,所以要忽略最后一个分隔符(suffixOverrides),配置为suffixOverrides=","

  • 最后就是后缀(suffix)加上判断条件where,配置为suffix="where id=#{id}"

5. <bind>的使用

<bind>的使用一般用于模糊查询,主要就是将%和值绑到一起,用一个参数来表示它们,具体使用如下:

    <!-- 用bind实现模糊查询 -->
    <select id="findStudentList4" parameterType="map" resultType="Student">
        <bind name="stu_name" value="'%'+stu_name+'%'" />
        select * from student where stu_name like #{stu_name}
    </select>

总结一下:

OGNL的使用远不止这么简单,因为demo中没有什么业务,所以会给没接触真正项目的人一种简单的错觉。OGNL中的暗坑不少,一定要仔细,遇到坑也别消极,这才是一个码农的基本素质。

相关文章

  • mybatis-notes:OGNL-mybatis的标签语法与

    1. 初步认识一蛤OGNL OGNL,Object Graph Navigation Language,是一种强大...

  • Day-21总结

    1.标签的语法html中的标签分为两种:双标签与单标签1)语法双标签:<标签名 属性名1=属性值1 属性名2=属性...

  • eyoucms for 数据循环输出标签

    【基础用法】 名称:for 功能:数据/记录循环输出标签(注:类似与volist、foreach标签) 语法: {...

  • JSX语法

    在react中,在js文件里写html标签,我们把这种语法称为 jsx语法。 jsx语法与普通js语法的区别 普通...

  • HTML // CSS

    HTML常用标签 CSS 样式与选择器 快捷语法

  • 2018-06-05——html元素

    HTML 元素语法 ·HTML 元素以开始标签起始 ·HTML 元素以结束标签终止 ·元素的内容是开始标签与结束标...

  • 标签的语法

    标签由英文尖括号<和>括起来,如 就是一个标签。 html中的标签一般都是成对出现的,分开始标签和结束标签。结束标...

  • 标签的语法

    1. 标签由英文尖括号<和>括起来,如 就是一个标签。 2. html中的标签一般都是成对出现的,分开始标签和结束...

  • 标签的语法

    1.标签由英文尖括号<和>括起来,如 就是一个标签。 2. html中的标签一般都是成对出现的,分开始标签和结束标...

  • XML(1)

    一.XML语法1.标签语法: 开始标签,结束标签,标签体内容1) 或 2)xml标签名称区分大小写3)x...

网友评论

      本文标题:mybatis-notes:OGNL-mybatis的标签语法与

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