ssm之mybatis(动态sql)

来源:互联网 发布:宁波淘宝网店培训 编辑:程序博客网 时间:2024/06/09 20:21

mybatis动态SQL中的set标签的使用

set标记是mybatis提供的一个智能标记,我一般将其用在修改的sql中,例如以下情况:

  <update>

    update user 

    <set>

      <if test="name != null and name.length()>0">name = #{name},</if>

      <if test="gender != null and gender.length()>0">gender = #{gender},</if>

    </set>

    where id = #{id}

  </update>

 在上述的代码片段当中,假如说现在三个字段都有值得话,那么上面打印的SQL语句如下:

 update user set name='xxx' ,  gender='xx'    where  id='x'

 在上面标红的地方是没有逗号的,也就是说set标记已经自动帮助我们把最后一个逗号给去掉了

mybatis动态sql中的trim标签的使用

trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:

  1、

  select * from user 

  <trim prefix="WHERE" prefixoverride="AND |OR">

    <if test="name != null and name.length()>0"> AND name=#{name}</if>

    <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>

  </trim>

  假如说name和gender的值都不为null的话打印的SQL为:select * from user where    name = 'xx' and gender = 'xx'

  在红色标记的地方是不存在第一个and的,上面两个属性的意思如下:

  prefix:前缀      

  prefixoverride:去掉第一个and或者是or

 

  2、

  update user

  <trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">

    <if test="name != null and name.length()>0"> name=#{name} , </if>

    <if test="gender != null and gender.length()>0"> gender=#{gender} ,  </if>

  </trim>

  假如说name和gender的值都不为null的话打印的SQL为:update user set name='xx' , gender='xx'     where id='x'

  在红色标记的地方不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:

  suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

  suffix:后缀

mybatis动态sql中where标签的使用

where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示:

  <select id="selectByParams" parameterType="map" resultType="user">

    select * from user

    <where>

      <if test="id != null ">id=#{id}</if>

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

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

    </where>

  </select>     

  在上述SQL中加入ID的值为null的话,那么打印出来的SQL为:select * from user where name="xx" and gender="xx"

  where 标记会自动将其后第一个条件的and或者是or给忽略掉

mybatis动态sql中foreach标签的使用

foreach标签主要用于构建in条件,他可以在sql中对集合进行迭代。如下:

  <delete id="deleteBatch"> 

    delete from user where id in

    <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">

      #{id}

    </foreach>

  </delete>

  我们假如说参数为----  int[] ids = {1,2,3,4,5}  ----那么打印之后的SQL如下:

  delete form user where id in (1,2,3,4,5)

  释义:

    collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为数组,所以值为array

    item : 表示在迭代过程中每一个元素的别名

    index :表示在迭代过程中每次迭代到的位置(下标)

    open :前缀

    close :后缀

    separator :分隔符,表示迭代时每个元素之间以什么分隔

我们通常可以将之用到批量删除、添加等操作中。




原创粉丝点击