<!--
        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从入门到精通》

最新文章

  1. Mellanox 8亿美元收购EZchip
  2. LINQ TO ENTITY 根据Birthday获取Age
  3. 命令cd
  4. 用DataSet方式更新数据库表
  5. 性能更好的js动画实现方式——requestAnimationFrame
  6. 【转】提供android 5.0 AOSP源码下载
  7. 快速排序算法C#实现
  8. python3 第七章 - 循环语句
  9. mysql执行计划简介
  10. C++ Primer 有感(管理类的指针成员)
  11. Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
  12. 基于python的unittest测试框架集成到jenkins(Mac)
  13. [Java初探外篇]__关于正则表达式
  14. 【372】Kaggle 相关经验
  15. SQL Server - 使用 Merge 语句实现表数据之间的对比同步
  16. Material Design In Action——重构bilibili客户端
  17. 【12c OCP】CUUG OCP认证071考试原题解析(36)
  18. Linux内核基础--事件通知链(notifier chain)good【转】
  19. ES6里关于类的拓展(二):继承与派生类
  20. Eclipse注释模板设置

热门文章

  1. SynchronizationContext笔记
  2. Bigtable:结构化数据的分布式存储系统
  3. Linux下的帮助命令
  4. msys2 安装笔记(可以按照这个关键字搜索)
  5. 发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)
  6. java之继承中的静态变量
  7. 关于web系统整体优化提速总结
  8. chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?
  9. Unity 通用透明物体漫反射Shader(双面渲染&amp;多光源&amp;光照衰减&amp;法线贴图&amp;凹凸透明度控制)
  10. Mac下安装redis5.0 与命令