<!--
        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. 微信小程序把玩(二十八)image组件

    原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...

  2. VS点击调试卡住的问题解决方案(转载)

    本来今天好好的,不知道弄到了什么,调试不了了,一点击立马卡住,就一直在那转,就在网上找了找解决方案,下面给大家列出来几种可能会卡住的问题已经解决方案 1:加载调试符号引起的卡住 解决方案: 在“选项” ...

  3. Android零基础入门第58节:数值选择器NumberPicker

    原文:Android零基础入门第58节:数值选择器NumberPicker 上一期学习了日期选择器DatePicker和时间选择器TimePicker,是不是感觉非常简单,本期继续来学习数值选择器Nu ...

  4. log4j-slf4j 典型用例

    一.maven 配置 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j ...

  5. Tinyhttpd for Windows(500多行)

    TinyHTTPd forWindows 前言 TinyHTTPd是一个开源的简易学习型的HTTP服务器,项目主页在:http://tinyhttpd.sourceforge.NET/,源代码下载:h ...

  6. 完美解决iis下JWplayer提示Error loading media: File could not be played错误

    最近开发项目需要使用JWplayer插件播放视频,但是无论换那个版本.换什么样的视频总是提示Error loading media: File could not be played错误,废了好大的劲 ...

  7. Win7 访问 数据库 慢

    不让TCP/IP调谐拖累网速 在Windows Server 2008工作环境中,下载访问网络中大容量的文件内容时,我们有时会感觉到网络连接速度非常缓慢,严重的时候还会出现不能访问的现象.遭遇这类故障 ...

  8. Python连载8-datetime包函数介绍

    一.datetime包(上接连载7内容) 1.函数:datetime (1)用法:输入一个日期,来返回一个datetime类​ (2)格式:datetime.datetime(年,月,日,hour=, ...

  9. Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder

    对话框的封装使用 最近写了个JFXUtils,DialogBuilder也是包含在里面了 JFXUtils的Github 前言 登录需要弹出登录对话框,但是,Jfoenix库使用对话框比较难受,还得动 ...

  10. 解决Mac下sed命令报错的问题

    在Mac上准备批量替换一些文字,使用sed命令,如下: sed -i 's/xxx/yyy/g' file 同样的命令在Linux上是可以成功运行的,注意Mac下man sed中-i参数的说明: 原来 ...