<!--
        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. win10 uwp 萤火虫效果

    原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...

  2. Win10《芒果TV》内测版现已支持在国行版 Xbox One 下载体验

    Win10<芒果TV>内测版现已支持在国行版 Xbox One 下载体验 关于国行为什么无法从商店下载安装芒果TV内测版(来自微软) 1.截至到目前<芒果TV - Preview&g ...

  3. Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

    原文:Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar 前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先 ...

  4. winform picturebox设置布局样式

    这里分背景图和直接显示的图片的布局 背景图的布局为BackgroundImageLayout设置为strecth即为自动拉伸 图片的布局为SizeMode 设置为StretchImage即自动拉伸

  5. MQTT-CN MQTT协议中文版

    欢迎任何形式的转载,但请务必注明出处:http://www.cnblogs.com/liangjingyang 项目地址:https://github.com/liangjingyang/MQTT-C ...

  6. Qt5.5以来对Network的改进(包括对SSL的功能支持,HTTP的重定向等等)

    Qt Network New SSL back-end for iOS and OS X based on Secure Transport. Note that in Qt 5.6 this wil ...

  7. 【Windows Universal Platform】只是学习笔记 - 开始

    我是初学,之前没有windows/windows phone的应用开发经验:开博的目的只是记录和督促自己学习. 心血来潮也好,或是个人喜好的原因,想学着自己开发APP了(PS:以前做过web 开发) ...

  8. QT Udp组播(穿透)

      http://blog.csdn.net/victoryknight/article/details/7814243 主题 UDPQt路由器 局域网内的两台机器如果隔有路由器,那么这两台机器之间不 ...

  9. Windows下搭建go语言开发环境 以及 开发IDE (附下载链接)

    1.下载 并且 安装 Go安装包   =========================================================== 在CSDN上传了我的版本,供大家下载: = ...

  10. DataVeryLite和Nhibernate性能对比

    电脑型号:acer 4752g 电脑配置: 代码分享: class Program { static void Main(string[] args) { Debug.Listeners.Add(ne ...