动态sql

作者: kanaSki | 来源:发表于2019-08-06 21:16 被阅读0次

根据不同条件,需要执行不同的sql命令

MyBatis中动态sql是在mapper.xml中添加逻辑判断

    <select id="selByEnameOrEmpNo" resultType="emp">
        select * from emp where 1=1
        -- OGNL表达式,直接写key或者对象的属性,不需要添加任何特殊符号(在接口内参数前加上@param(key)注解
        <if test="ename!=null and ename!=''">and ename=#{ename}</if>
        <if test="empno!=null and empno!=''">and empno=#{empno}</if>
    </select>

<where>
当编写where标签时,去掉内容中第一个是and,则会去掉第一个and
如果where标签内有内容,将生成where关键字,没有则不生成

    <select id="selByEnameOrEmpNo" resultType="emp">
        select * from emp 
        <where>
        <if test="ename!=null and ename!=''">and ename=#{ename}</if>
        <if test="empno!=null and empno!=''">and empno=#{empno}</if>
        </where>
    </select>

<choose><when><otherwise> ——只要有一个条件成立,其他都不执行(类似于含有break的switch case)

    <select id="selByEnameOrEmpNo" resultType="emp">
        select * from emp
        <where>
            <choose>
                <when test="ename!=null and ename!=''">and ename=#{ename}</when>
                <when test="empno!=null and empno!=''">and empno=#{empno}</when>
            </choose>
        </where>
    </select>

<set> 用在SQL中set从句
去掉最后一个,
如果set标签内有内容,会生成set关键字,没有则不会生成

    <update id="upd">
        update emp
        <set>
            empno=#{empno},
            <if test="ename!=null and ename!=''">ename=#{ename},</if>
        </set>
        <where>
            empno=#{empno}
        </where>
    </update>

<trim>标签
prefix属性指在前面加
prefixOverrides属性指去掉前面指定部分(先删除再加前缀)
suffix属性指在后面加
suffixOverrides属性指删除后面指定部分(先删除再加后缀)
但是注意在插入前后缀时会插入一个空格

    <select id="selByEnameOrEmpNo" resultType="emp">
        select * from emp
        <trim prefix="where" prefixOverrides="and">
            and ename=#{ename}
        </trim>
    </select>

<bind>标签

    <select id="selByEnameOrEmpNo" resultType="emp">
        <bind name="sal" value="'$'+sal"></bind>
        select * from emp where sal=#{sal}
    </select>

其中传入的sal会按照$加上sal的值进行传递

<foreach>标签
循环参数内容,还具备在内容的前后添加内容,还具备添加分隔符功能
适用场景:in查询,批量新增

    <select id="selByEnameOrEmpNo" parameterType="list" resultType="emp">
        select * from emp where empno in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </select>

sql标签

    <select id="sel" resultMap="emp">
        select
        <include refid="mysql"></include>
        from emp
    </select>

    <sql id="mysql">
        sal,ename
    </sql>

相关文章

  • MyBatis学习:动态sql

    1.动态sql 动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通...

  • 第十三章 使用动态SQL(一)

    第十三章 使用动态SQL(一) 动态SQL简介 动态SQL是指在运行时准备并执行的SQL语句。在动态SQL中,准备...

  • 第八章 动态SQL

    动态SQL中的元素介绍 动态SQL有什么作用 MyBatis提供了对SQL语句动态组装的功能 动态SQL中的元素 ...

  • 关于Mybatis的一些问题讨论

    Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理 动态sql的用途 Mybat...

  • MyBatis5-动态 SQL

    动态 SQL 什么是动态 SQL 就是动态的对 SQL 进行组装 拼接. : 可以自动去...

  • geoserver动态颜色参数样式、动态sql配置实现

    geoserver动态颜色参数样式、动态sql配置实现 动态颜色参数样式、动态sql 访问方式: http://l...

  • 强大的动态SQL

    1 动态SQL# 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家...

  • MyBatis:动态 SQL

    1. 动态 SQL 简而言之,动态 SQL 就是在 Mapper 中使用分支、循环等逻辑。常见的动态 SQL 元素...

  • 无标题文章

    ### 一、简答题 #### 1、Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行...

  • 五,MyBatis动态SQL

    一,含义:动态SQL是指根据参数数据动态组织SQL的技术 二,动态SQL的应用场景:比如淘宝搜索的时候,可以动态的...

网友评论

      本文标题:动态sql

      本文链接:https://www.haomeiwen.com/subject/wggvdctx.html