if 语句

    <select id="getOne" resultType="com.mybatis.entity.SmbmsProviderEntity">
    SELECT * FROM smbms_provider where 1=1
     <if test="proCode!=null and proCode!=''">
     and proCode LIKE CONCAT('%',#{proCode},'%')
     </if>
     <if test="proName!=null and proName!=''">
    and proName LIKE CONCAT('%',#{proName},'%')
     </if>
    </select>
   利用if来实现多条件查询,if元素的test属性表示进入if内需要满足条件。
   若提供了proName参数,那么SQL的where条件就要满足:proName like concat ('%',#{proName},'%'),最终返回满足这些where条件的数据列表。

if+where 语句

    <select id="getOne" resultType="com.mybatis.entity.SmbmsProviderEntity">
      SELECT * FROM smbms_provider
    <where>
     <if test="proCode!=null and proCode!=''">
    and proCode LIKE CONCAT('%',#{proCode},'%')
    </if>
     <if test="proName!=null and proName!=''">
      and proName LIKE CONCAT('%',#{proName},'%')
      </if>
      </where>
    </select>
  where元素主要用来简化SQL语句中的where条件判断,并能智能地处理and和or,不必担心多余关键字的语法错误。

if+set 语句

    set元素主要用于更新操作:它的主要功能和where元素差不多,主要是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号忽略掉,在配合if元素就可以动态地更新需要修改的字段;而不需要修改的字段,则不再被更新。

      <update id="update">

        update User

          <set>

            <if test="userCode!=null and userCode!=''">

              userCode=#{userCode},

            </if>       

           <if test="userName!=null and userName!=''">

              userName=#{userName}

             </if>

          </set>

          where id=#{id}

       </update>

     使用set标签不仅可以动态地配置set关键字,还可以剔除追加条件末尾的任何不相关的逗号(因为update语句中使用if标签,若后面的if没有执行,则导致在语句末尾残留多余的逗号)。

if+trim 语句

    trim元素也会自动识别其标签内是否有返回值,若有返回值,会在自己包含的内容前加上某些前缀,也可在其后加上某些后缀,与之对应的属性是prefix和suffix;也可把包含内容的首部某些内容覆盖(即忽略)。或者把尾部的某些内容覆盖,与之           对应的属性是prefixOverrides和suffixOverrides;正因为trim有这样强大的功能,我们可以利用trim来代替where元素,并实现与where元素相同的效果。

      <update id="update">

        update User

          <trim prefix="SET" suffixOverrides=",">

            <if test="userCode!=null and userCode!=''">

              userCode=#{userCode},

            </if>       

            <if test="userName!=null and userName!=''">

              userName=#{userName}

             </if>

          </trim>

          where id=#{id}

       </update>

    prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀,如此出的where;

    suffix:后缀,作用是在trim包含的内容上加上后缀;

    prefixOverrides:对于trim包含内容的首部进行指定内容忽略;

    suffixOverrides:对于trim包含内容的首尾部进行指定内容的忽略;

mybatis入参为List类型的 foreach 迭代  

      Dao层:

        

      小配置文件:

<select id="getThree" resultType="com.mybatis.entity.SmbmsProviderEntity">
        select * from smbms_provider where proCode in
          <foreach collection="list" item="pr" open="(" close=")" separator="," >
            #{pr}
          </foreach>
        </select>
      测试类:

        

     注意:foreach元素非常强大,允许我们指定一个集合,并指定开始和结束的字符,也可以加入一个分隔符到迭代器中,并能够智能处理该分隔符,不会出现多余的分隔符;

mybatis入参为Map类型的 foreach 迭代

     Dao层:

        

      小配置文件:

      
<select id="getMap" resultType="com.mybatis.entity.SmbmsProviderEntity">
       select * from smbms_provider where proCode in
        <foreach collection="maps" item="map" open="(" close=")" separator="," >
          #{map}
        </foreach>
        </select>

MyBatis智能标签!的更多相关文章

  1. MyBatis 智能标签

    使用Where 只能标签 检索部门Y2162Dept 数据库已存在表Y2162Dept 实现动态查询 Deptno Deptname 赋值 不赋值 不赋值 赋值 赋值 赋值 不赋值 不赋值 <! ...

  2. Mybatis智能标签

    一.ProviderDao层 //智能标签案例 //智能标签多条件查询 public List<Provider> providerTest(@Param("proCode&qu ...

  3. MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)

    一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...

  4. mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  5. MyBatis系列四 之 智能标签进行查询语句的拼接

    MyBatis系列四 之 智能标签进行查询语句的拼接 使用Foreach进行多条件查询 1.1 foreach使用数组进行多条件查询 在MyBatis的映射文件中进行如下配置 <!--根据数组进 ...

  6. SSM-MyBatis-14:Mybatis中智能标签

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 谈论到智能,有什么要想的没有? 我下面放张图 相信都见过这个吧,你在之前没有学习过框架的时候怎么写的,动态sq ...

  7. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  8. MyBatis初学者配置

    小配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC &qu ...

  9. mybatis大框架

    MyBatis   开源的数据持久化层框架 实体类与SQL语句之间建立映射关系 一:MyBatis前身是IBatis,本是Apache的一个开源的项目, 基于SQL语法,简单易学 ,是耦合度降低,方便 ...

随机推荐

  1. [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...

  2. final,finally,finalize之间的区别。

    fianl:可以修饰类.变量.方法.修饰类不能被继承,修饰变量只能赋值一次,修饰方法不能被重写. finally是try语句体中的一个语句体,不能单独使用,用来释放资源. finalize()是在ja ...

  3. Springboot - java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'

    Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning a simple key in 'reader', lin ...

  4. 93.vue---在vue环境用webuploader分片上传插件遇到的超级bug(独家仅此一份)

    本来我是想想用vue-simple-uploader (https://www.cnblogs.com/xiahj/p/vue-simple-uploader.html)的 但是公司后台已经做好了we ...

  5. 《JavaScript高级程序设计》笔记:附录A ECMAScript Harmony

    一般性变化 常量 用const关键字声明常量,声明的变量在初始赋值后,就不能进行修改了,如下代码: const MAX_SIZE = 25; MAX_SIZE = 10; //报错 块级作用域及其他作 ...

  6. Java 之 lambda 表达式

    一.函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,就是“拿什么东西做什么事情”.相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语 ...

  7. 渗透 Facebook 的思路与发现

    0x00 写在故事之前 身一位渗透测试人员,比起 Client Side 的弱点,我更喜欢 Server Side 的攻击,能够直接控制服务器并获得权限操作 SHELL 才爽 . 当然一次完美的渗透出 ...

  8. AF step、Bokeh等说明

    基本概念:FV: Focus Value, 用来衡量图像AF的清晰度. DOF: Deep Of Field, 景深,表示物距清晰的范围,景深越长表示物距前后清晰的范围越大. AF step一般来说, ...

  9. PostgreSQL 基本数据类型及常用SQL 函数操作

    数据类型 名字 别名 描述 bigint int8 有符号的8字节整数 bigserial serial8 自动增长的8字节整数 bit [ (n) ]   定长位串 bit varying [ (n ...

  10. easyui datagrid Column Group 列组、 复杂表头 嵌套表头 组合表头 (转载)

    核心: rowspan:2   //占两行 colspan:3    //占三列 所有的colspan下的二级列表头,统一放在一个数组里. 文章一: 转载来源:https://blog.csdn.ne ...