mybatis动态sql

一,mybatis 动态sql

  1) mybatis 的动态sql可以对查询条件进行预编译,生成比较灵活的sql语句

二,常用标签

  1)if   :判断传入参数    

     

 <if test="oIp != null">   <!--test里面是判断条件, oIp 是传入对象中的成员变量 -->
   o_ip,             <!-- 这里是条件成立要添加的内容 -->
 </if>

 

  2)where  :    

     

 select * from
  sys_inf_user
      <where>
          <if test="oId != null"> 
              o_id = #{oId}
          </if> 
          <if test="oIp != null">
             and o_ip = #{oIp}
          </if> 
       </where>
        <!--
        用于where处,当其中只有部分条件满足时,会去除条件前面的 and 或者 or

        (例如下面的第一个条件不满足,那么sql语句就变成select * from sys_inf_user

        where o_ip = #{oIp}),当全部

        条件都不满足的时候,会查出全部结果,就相当于select * from  sys_inf_user

         where 1=1
        --> 

 

  3)set :      

      

update sys_inf_user
      <set>
        <if test="uName != null">
          u_name =#{uName},
        </if>
        <if test="">
          u_pwd =#{uPwd},
        </if>
        where u_id = #{uId}
      </set>
     <!--
        一般用于set位置 ,当全部条件不满时,会报错,当部分条件满足时
        会去除条件后面的 ',' 符号;例如下面条件都满足时:sql是: (
        update sys_inf_user u_name =#{uName},u_pwd =#{uPwd}
        where u_id = #{uId}); 可以看出已经去掉了#{uPwd}后面的,符号;
        当下面条件只满足一个时,也会去除尾部的,符号;
      -->
 

 

  4)trim :     

      

    <!-- trim 可以定义规则
        prefixOverrides :表示要去除的前置内容
        prefix : 表示要添加的开始内容
        suffix : 表示要添加的结束内容
        suffixOverrides :表示要去除的后置内容
      -->

    <trim prefixOverrides="and | or" prefix="(" suffix=")" suffixOverrides=",">

    </trim>
    <!-- trim 的经典实现

      set 标签 :
      set标签等效于:
        <trim prefix ="set " suffixOverrides=","> 

        </trim>

      where 标签:
        <trim prefixOverrides="and | or" prefix="where "> 

        </trim>
     -->

 

  5)foreach :  

    

    <!-- 
      collection :传入参数名, List类型写:list 数组类型写:array  map类型写 : 具体key(参考下面foeach遍历map)

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

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

      open :前缀

      close :后缀

      separator :分隔符,表示迭代时每个元素之间以什么分隔
    -->
      <foreach collection="list" open="(" index="index" item="item" close=")" separator=",">
        #{item}
      </foreach>

 三,foreach 使用

   1)批量添加(传入list,list里包含对象)

    1.准备数据:

     命名不规范,只为示例;

ArrayList<Object> list = new ArrayList<>();
        
        Test test = new Test();
        test.setName("wangwu");
        test.setPwd("123");
        test.setDizhi("北京");
        test.setDianhua("123456789");
        
        Test test2 = new Test();
        test2.setName("lisi");
        test2.setPwd("123456");
        test2.setDizhi("北京,shanghi");
        test2.setDianhua("123456789");
        list.add(test);
        list.add(test2);
        
        int i=testMapper.addTestLists(list);

    

    2.接口

int addTestLists(ArrayList<Object> list);

    3.sql

<insert id="addTestLists" parameterType="java.util.List">
    insert into 
    sys_test
    (name,pwd,dianhua,dizhi)
    values
    <foreach collection="list"  separator=","  index="index" item="item">
            (#{item.name},#{item.pwd},#{item.dianhua},#{item.dizhi})            
    </foreach>
</insert>

   2)批量删除

      1.准备数据:

  

        List<Integer> list = new ArrayList<Integer>();
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        int i=testMapper.deleteTest(list);

 

      2.接口:

    

int deleteTest(List<Integer> list);

 

      3.sql :

<delete id="deleteTest" parameterType="java.util.List">
    delete from 
    sys_test
    where id in
    <foreach collection="list" open="(" close=")" separator="," index="index" item="item">
        #{item}
    </foreach>
</delete>

    3)foreach遍历map

      1)数据准备

    Map<Object, Object> hashMap = new HashMap<>();
        hashMap.put("id1", 2);
        hashMap.put("id2", 10);
        int i=testMapper.deleteTests(hashMap);

 

      2)接口

int deleteTests(@Param(value="maps")Map<Object, Object> hashMap);

      3)sql

<delete id="deleteTests" parameterType="java.util.Map">
    delete from 
    sys_test
    where id in
    <foreach collection="maps.values" open="(" close=")" separator="," index="index" item="item">
        #{item}
    </foreach>
</delete>

 

posted @ 2017-11-23 13:30  言_曦  阅读(732)  评论(0编辑  收藏  举报