动态SQL

Posted 眼泪,还是流了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态SQL相关的知识,希望对你有一定的参考价值。

1 基于OGNL表达式(类似jstl表达式)

2 完成多条件查询等逻辑实现

3 实现动态SQL的元素

<if>

<where>

<set>

<trim>

<foreach>

<choose>

<when>

<otherwise>

4 if

语法:

<if test="条件"></if>

注意:如果判断变量的类型是字符串时,要注意是否需要判断空串.

    :<if test="userName!=null and userName !=‘‘"></if>

5 where

智能处理and或者or.(会去掉where后面的第一个and或者or)

:

select * from smbms_user

<where>

<if test="uName!=null and uName !=‘‘">

and username  like CONCAT(‘%‘,#{uName},‘%‘)

</if>

<if test="uRole != null">

and userRole = #{uRole}

 </if>

</where>

6 set

智能处理update时的逗号.(会去掉set后面最后个set值的逗号)

:

update smbms_user

<set>

<if test="userCode!=null">

userCode = #{userCode},

</if>

<if test="userName!=null">

  userName = #{userName},

</if>

<if test="userPassword!=null">

 userPassword = #{userPassword}

</if>

             </set>

             where id = #{id}

7 trim

a.更灵活地去除多余关键字

b.属性:

prefix(前缀)

suffix(后缀)

prefixOverrides(前缀覆盖)

suffixOverrides(后缀覆盖)

c.替换where

<trim prefix="where" prefixOverrides="or|and">

<if test="uName!=null and uName !=‘‘">

and username  like CONCAT(‘%‘,#{uName},‘%‘)

</if>

<if test="uRole != null">

and userRole = #{uRole}

 </if>

</trim>

d.替换set

 update smbms_user

        <trim prefix="set" suffixOverrides=","  

         suffix="where id = #{id}">

         <if test="userCode!=null">

userCode = #{userCode},

</if>

<if test="userName!=null">

  userName = #{userName},

</if>

<if test="userPassword!=null">

 userPassword = #{userPassword}

</if>

        </trim>

8 foreach

a)迭代一个集合,通常用于in条件

b)属性

item  :集合参数

index :下标

collection:必须指定

list  (集合)

array (数组)

map-key(map)

open  :开始"("

separator: 分割符:,

close: 结尾:")"

:

<select id="getUserByRoles" resultType="User">

select * from smbms_user  

where  gender= #{gender} and userRole in

<foreach collection="uRole" item="roles"

open="(" close=")" separator=",">

#{roles}

</foreach>

</select>

9 choose

a.相当于Javaswitch语句

b.when有条件满足的时候,就跳出choose

<choose>

<when test ="条件1"> </when>

<when test ="条件2"> </when>

<when test ="条件3"> </when>

<otherwise></otherwise>

</choose>

以上是关于动态SQL的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis:动态sql语句

动态SQL是什么??什么是静态SQL,动态SQL的动态体现在哪里???

jpa 如何优雅的实现动态sql

Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取

mybatis 动态SQL .2

mybatis 详解------动态SQL