首页 > 数据库 >mybatis动态sql标签

mybatis动态sql标签

时间:2024-12-24 17:12:01浏览次数:3  
标签:语句 标签 sql ids job SQL mybatis

根据条件--sql发生改变。需要使用mybatis的动态sql标签
作用
这些动态 SQL 标签在 MyBatis 中提供了灵活的查询和更新操作的能力,可以根据不同的条件动态生成 SQL 语句,使 SQL 映射文件更具可读性和可维护性。
常见的mybatis动态sql标签

<trim>:通过修剪 SQL 语句的开头和结尾来动态生成 SQL 片段。它可以用于去除不必要的 SQL 关键字或条件语句,并提供了一些属性来定义修剪规则。

<where>:用于在生成的 SQL 语句中添加 WHERE 子句。它可以自动处理条件语句的前缀,并在有条件语句存在时添加 WHERE 关键字。而且会去除sql的第一个and标签。

<set>:用于在生成的 SQL 语句中添加 SET 子句。它主要用于更新操作,可以根据条件来动态生成需要更新的列。

<foreach>:用于在生成的 SQL 语句中进行循环操作。它可以遍历集合或数组,并根据指定的模板将集合元素或数组元素插入到 SQL 语句中。

<if>:用于在生成的 SQL 语句中添加条件判断。可以根据指定的条件决定是否包含某个 SQL 语句片段。

<choose>:类似于 Java 中的 switch 语句,根据条件选择执行不同的 SQL 语句片段。它可以包含多个 <when> 和一个可选的 <otherwise> 标签。

<when>:用于在 <choose> 标签中定义条件分支。可以根据指定的条件判断是否执行特定的 SQL 语句片段。

<otherwise>:在 <choose> 标签中可选的标签,用于定义当没有任何 <when> 条件匹配时执行的 SQL 语句片段。

1.if+Where动态sql标签

 <select id="getByCondition" resultMap="EmpResultMap">
        select * from emp
        <where>
            <if test="ename!=null and ename!=''">
                and ename like concat('%',#{ename},'%')
            </if>
            <if test="job!=null and job!=''">
                and job like concat('%',#{job},'%')
            </if>
            <if test="deptNo!=null">
                and deptNo=#{deptNo}
            </if>
        </where>

    </select>

2.choose when otherwise

   <select id="getByCondition2" resultMap="EmpResultMap">
        select * from emp
        <where>
            <choose>
                <when test="ename!=null and ename!=''">
                    and ename like concat('%',#{ename},'%')
                </when>
                <when test="job!=null and job!=''">
                    and job like concat('%',#{job},'%')
                </when>
                <when test="deptNo!=null">
                    and deptNo=#{deptNo}
                </when>
                <otherwise>
                     and sal>6000
                </otherwise>
            </choose>
        </where>
    </select>

表示: 查询when是否满足条件,如果满足,则不会执行下面的条件判断了。当所有的when标签都不满足条件时执行otherwise标签。
3.set标签

 <!--
        如果有修改的字段自动添加set关键字,并且会去除最后的逗号
    -->
    <update id="update">
         update emp
             <set>
                 <if test="ename!=null and ename!=''">
                     ename=#{ename},
                 </if>
                 <if test="job!=null and job!=''">
                     job=#{job},
                 </if>
             </set>
             where empno=#{empNo}
    </update>

4.foreach标签
批量删除。

delete from 表名 where id in(1,6,7,9,2);

    <!--
       delete from emp where empno in(1,2,3)
          collection: 表示遍历集合中的元素
          item: 把集合中的内容赋值给该变量
          open: 开始符号
          close: 结束符号
          separator: 分隔符
    -->
    <delete id="batchDelete">
        delete from emp
        <foreach collection="ids" item="id" open="where empno in(" close=")" separator=",">
             #{id}
        </foreach>
    </delete>

   @Test
    public void test6() throws Exception {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSession sqlSession = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession();
        EmpDao empDao =sqlSession.getMapper(EmpDao.class);
        List<Integer> ids=new ArrayList<>();
        ids.add(7839);
        ids.add(7830);
        ids.add(7835);
        ids.add(7831);
        ids.add(7810);
       empDao.batchDelete(ids);
        sqlSession.commit();
    }

标签:语句,标签,sql,ids,job,SQL,mybatis
From: https://www.cnblogs.com/xiaomubupi/p/18628177

相关文章

  • mybatis(2)
    1.注解模式--了解之前我们使用mybatis完成数据库表操作时,使用的是xml映射文件来完成。我们也可以使用主键模式完成对表的操作。dao接口配置文件2.mybatis的优化2.1添加sql日志文件我们刚才操作数据库表时,没有再控制台打印sql语句,添加日志文件后,即可再控制台打印sql语......
  • 【云服务器教程】3分钟搞定MySQL远程访问配置
    本文将介绍如何在云服务器上快速配置MySQL远程访问权限,包含必要的安全设置。一、配置云服务器(以阿里云为例)登录阿里云控制台配置安全组:开放3306端口配置防火墙:#开放3306端口sudofirewall-cmd--permanent--add-port=3306/tcpsudofirewall-cmd--reload二、配置My......
  • mybatis
    1.什么是mybatis框架?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射实体类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式......
  • Mysql5.7配置主从实际操作记录
    ......
  • mybatis中传参对sql语句的影响
    1.当有类型为Intger的参数传参时,发现传0时被认为是false,使得不满足了判断条件例如<selectid="findDataByCondition"resultMap="entity"parameterType="map"> SELECT*fromtable WHERE1=1 <iftest="state!=nullandstate!=''"&......
  • 用pandas导入含嵌套字典的json文件至mysql数据库
    需要导入的文件格式如下,要把data-diff数组里的所有元素导进去,对于某些json文件还需要添加日期字段。{"rc":0, "rt":6, "data":{ "total":197, "diff":[ { "f1":1, "f2":295.5, "f3":{"f4":......
  • 写sql的几个要点
    sql是程序员必备的技能,现在很多框架帮助你完成了与数据库对接,自动生成了sql。但往往生成的sql质量不高。我举几个例子。第一、很多人在接口代码中循环访问数据库,结果自己都不知道会有多少个sql被执行,导致接口运行缓慢。很多时候是可以一条sql完成的工作。第二、很多人在写sql......
  • 基于 Spring Boot、MyBatis Plus、MySQL、HTML、CSS、JavaScript、Vue.js、Redis 与 S
    1.项目概述1.1项目目标为学生提供个性化课程推荐,助力高效选课。构建师生交流社区,促进课程相关交流。实现课程与用户信息的高效管理。1.2功能概述用户管理:包括注册、登录、信息修改、角色管理。课程管理:课程发布、查询、修改、删除、选课操作、评价与推荐。交流社区:课......
  • SQLMAP注入之MySQL注入总结
    SQLMAP注入之MySQL注入总结简介sqlmap是一个开源的自动化SQL注入(SQLi)攻击和数据库接管工具,广泛应用于渗透测试、漏洞评估和安全研究。它旨在帮助安全研究人员和渗透测试人员发现和利用SQL注入漏洞,进行数据库接管、信息泄露和数据提取等操作。sqlmap提供了强大的功能,可以......
  • 免费送源码:Java+SpringBoot+MySQL SpringBoot会务管理系统 计算机毕业设计原创定制
    SpringBoot会务管理系统摘 要随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改观。本课题研究的会务管理系统,主要功能模块包括用户管理,会议信息,会议签到,请假管理,评分记录,听会感受,意见箱等,采取面对对象的开发模式进行......