<!--
        4.3.1 where用法

            <where>标签的作用:如果该便签包含的元素中有返回值,就插入一个where;如果
            where后面的字符串是一and或or开头的,就将它们剔除掉。

            案例分析
                当if条件不满足的时候,where元素中没有任何内容,所以SQL中不会出现where,也就
                不存在4.1.1节中的SQL错误的问题。如果if条件满足,where元素的内容就是以and开
                头的条件,where会主动去掉开头的and,这也能保证where条件正确。
                    ——很尴尬的一点,这样的化,反倒会将整张表都给查出来。。。
    -->

    <select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser">
        SELECT id,
        user_name userName,
        user_password userPassword,
        user_email userEmail,
        user_info userInfo,
        head_img headImg,
        create_time createTime
        FROM sys_user
        <where>
            <if test="userName != null and userName != ''">
                AND user_name LIKE CONCAT('%',#{userName},'%')
            </if>
            <if test="userEmail != null and userEmail != ''">
                AND user_email = #{userEmail}
            </if>
        </where>
    </select>

    <!--
        4.3.2 set用法

            <set>标签的作用:如果该标签包含的元素中有返回值,就插入一个set;如果set
            后面的字符串是以逗号结尾的,就将这个逗号剔除掉。
    -->

    <update id="updateByIdSelective">
        UPDATE sys_user
        <set>
            <if test="userName != null and userName != ''">
                user_name = #{userName},
            </if>
            <if test="userPassword != null and userPassword != ''">
                user_password = #{userPassword},
            </if>
            <if test="userEmail != null and userEmail != ''">
                user_email = #{userEmail},
            </if>
            <if test="userInfo != null and userInfo != ''">
                user_info = #{userInfo},
            </if>
            <if test="headImg != null">
                head_img = #{headImg,jdbcType=BLOB},
            </if>
            <if test="createTime != null">
                create_time = #{createTime,jdbcType=TIMESTAMP},
            </if>
            id=#{id}
        </set>
        WHERE id=#{id}
    </update>

    <!--
        4.3.3 trim用法
            <where>和<set>标签都可以用trim标签实现,并且底层就是通过TrimSqlNode实现的

            <where>标签对应的trim实现:
                <trim prefix="WHERE" prefixOverride="AND |OR ">

            <set>标签对应的trim实现:
                <trim prefix="SET" suffixOverrides=",">

            提示:
                prefixOverride中AND和OR后面的空格不能省略,为了避免匹配到andes或
                orders等单词。实际上prefixOverride包含"AND""OR""AND\n""OR\n"
                "AND\r""OR\r""AND\t""OR\t"

            <trim>标签属性:
                prefix:当trim元素包含内容时,会给内容增加prefix指定的前缀
                prefixOverride:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉。
                suffix:当trim元素包含内容时,会给内容增加prefix指定的后缀
                suffixOverride:当trim元素包含内容时,会把内容中匹配的后缀字符串去掉。
    -->

From《MyBatis从入门到精通》

MyBatis where、set、trim标签的用法的更多相关文章

  1. Mybatis中trim标签的用法

    select * from t_user <trim prefix="WHERE" prefixOverrides="and"> <if te ...

  2. MyBatis动态添加—trim标签

    做添加时,部分字段有值,没值的字段不添加,这就是动态添加,使用 trim 标签就可以实现. <insert id="insertSysUser" parameterType= ...

  3. MyBatis中关于SQL标签的用法(重用SQL 代码段)

    一. 没用sql标签前的SQL映射代码: <select id="findById" resultType="cn.tedu.mybatis.entity.User ...

  4. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

  5. MyBatis动态SQL中trim标签的使用

    My Batis 官方文档 对 动态SQL中使用trim标签的场景及效果介绍比较少. 事实上trim标签有点类似于replace效果. trim 属性 prefix:前缀覆盖并增加其内容 suffix ...

  6. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

    一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...

  7. Mybatis之trim标签的理解

    最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里的解释,太宽泛,还是不能理解: trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其 ...

  8. mybatis动态插入数据(使用trim标签)

    知识点: 当向一张表里插入数据,传入的参数不固定时,使用到mybatis的动态插入(trim标签) 参考博客:https://blog.csdn.net/h12kjgj/article/details ...

  9. Mybatis学习笔记11 - 动态sql之trim标签

    trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...

随机推荐

  1. 什么是 MEF?

    什么是 MEF? Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用程序的库. 它让应用程序开发人员得以发现和使用扩展且无需配置. 它还让扩展开发人 ...

  2. LINQ学习笔记(一)

    LINQ,语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展. 它允许编写C#或Visual Basic代码以查询数据库相同的方法操作 ...

  3. 微信后台.net网站接入

    微信公众号开发需要一个网站接入,根据官网教程,微信服务器会向网站发送四个数据echoString,signature ,timestamp ,nonce. 其中signature是经过timestam ...

  4. mingw(gcc)默认使用的是dwarf格式

    无意中发现的: C:\Users\my>gcc -vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=C:/Qt/Qt5.6.2/T ...

  5. centos yum 安装 jdk1.8

    JDK: 版本:1.8 服务器默认安装1.7,所以不使用默认安装 yum -y list java* --查看yum的jdk安装包 yum install java-1.8.0-openjdk jav ...

  6. 【Go】使用压缩文件优化io (一)

    原文连接:https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html 最近遇到一个日志备份 io 过高的问题, ...

  7. Metasploit学习笔记

    原创博客,转载请注出处! 各位看官可参看——Metasploit实验操作 1.打开msf        msfconsole2.帮助选项:    msfconsole -h        显示在msf ...

  8. Liunx 安装 Nessus

    Liunx 安装 Nessus   啥子是Nessus 它是一款系统漏洞扫描与分析软件,可以扫描服务器存在哪些漏洞,页面简介美观,非常Nice. 获取激活码 首先访问如下网站 https://www. ...

  9. 【转】JDK 内存参数含义

    Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm  Gen (Non-heap memory) ...

  10. MySQL下的DB Link

    前言: 在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库.此时我们就需要用到数据表映射.如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接 ...