【MyBatis】四、MyBatis中的动态SQL标签

news/2024/11/30 6:51:46/

动态SQL

动态SQL语句是动态的拼接Mybatis中SQL语句的情况,可以动态的在Mybatis中使用SQL

if语句

if语句的xml文件:

<!--    List<Emp> getEmpByCondition(Emp emp);--><select id="getEmpByCondition" resultType="Emp">select * from t_emp where 1 = 1<if test="empName != null and empName != ''">emp_name = #{empName}</if><if test="sex != null and sex != ''">and sex = #{sex}</if><if test="age != null and age != ''">and age = #{age}</if><if test="email != null and email != ''">and email = #{email}</if></select>

传入对象来进行调用:

    @Testpublic void test() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);List<Emp> empList = mapper.getEmpByCondition(new Emp(null, "", 23, "男", "123@qq.com", null));System.out.println(empList);}

WHERE语句

where标签中的and会被自动去掉,并且若没有合适的内容,则不会添加where关键字

注意:where标签只能去掉条件前的and、五福去掉条件后的and

    <select id="getEmpByCondition" resultType="Emp">select * from t_emp<where><if test="empName != null and empName != ''">emp_name = #{empName}</if><if test="sex != null and sex != ''">and sex = #{sex}</if><if test="age != null and age != ''">and age = #{age}</if><if test="email != null and email != ''">and email = #{email}</if></where></select>

trim标签

trim标签会在其内容中没有合适的内容时不添加其内容,若trim标签内有内容时,则会添加这个内容

<!--    如果trim中的if有一个成立,就会把where添加进去,如果if语句后没有语句,则会将末尾的and或or去掉--><select id="getEmpByCondition" resultType="Emp">select * from t_emp<trim prefix="where" suffixOverrides="and|or"><if test="empName != null and empName != ''">emp_name = #{empName} and</if><if test="sex != null and sex != ''">sex = #{sex} or</if><if test="age != null and age != ''">age = #{age} and</if><if test="email != null and email != ''">email = #{email}</if></trim></select>

choose、when、otherwise

choose是when和otherwise的父标签,when和otherwise要写在choose中,相当于编程语言中的if…else…if…else…

<!--    List<Emp> getEmpByChoose(Emp emp);--><select id="getEmpByChoose" resultType="Emp">select * from t_emp<where><choose><when test="empName != null and empName != ''">emp_name = #{empName}</when><when test="sex != null and sex != ''">sex = #{sex}</when><otherwise>did = 1</otherwise></choose></where></select>

注意这里when至少有一个、otherwise至多有一个,也可以没有

foreach

通过数组实现批量删除

mapper接口:

    /*** 通过数组实现批量删除(形参传入数组)*/int deleteMoreByArray(@Param("eids") Integer[] eids);

xml:

<!--    int deleteMoreByArray(Integer[] eids);-->
<!--    foreach标签中,collection代表要遍历的数组名,item代表每次遍历得到的数据,separator代表每个数据之间的分隔,open
代表遍历前添加,close代表在遍历之后添加--><delete id="deleteMoreByArray">DELETE from t_emp where eid in<foreach collection="eids" item="eid" separator="," open="(" close=")">#{eid}</foreach></delete>

xml的第二种写法:

    <delete id="deleteMoreByArray">delete from t_emp where<foreach collection="eids" item="eid" separator="or">eid = #{eid}</foreach></delete>

通过集合实现批量添加

建立接口:

    /*** 通过list实现批量添加*/int insertMoreByList(@Param("emps") List<Emp> list);

建立xml:

<!--    int insertMoreByList(List<Emp> list);--><insert id="insertMoreByList">insert into t_emp values<foreach collection="emps" item="emp" separator=",">(null, #{emp.empName}, #{emp.age}, #{emp.sex}, #{emp.email}, null)</foreach></insert>

sql标签

sql标签用来将常用的一些字段记录,下次在有这些字段出现时可以简易的替换这些字段:

使用include标签来引用定义的sql片段

    <sql id="empColumn">eid, emp_name, age, sex, email</sql><select id="getEmpByConditionOne" resultType="Emp">select <include refid="empColumn"></include> from t_emp</select>

http://www.ppmy.cn/news/1102166.html

相关文章

Android Studio开发入门教程:如何更改APP的图标?

更改APP的图标&#xff08;安卓系统&#xff09; 环境&#xff1a;Windows10、Android Studio版本如下图、雷电模拟器。 推荐图标库 默认APP图标 将新图标拉进src/main/res/mipmap-hdpi文件夹&#xff08;一般app的icon图标是存放在mipmap打头的文件夹下的&#xff09; 更改sr…

Android菜单(上下文菜单)(选项菜单)

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需要手动创建。Android Resource Directory->value menu 菜单资源根元素通常是<menu></menu>标记&#xff0c;子元素为<item></ite…

End-to-end 3D Human Pose Estimation with Transformer

基于Transformer的端到端三维人体姿态估计 摘要 基于Transformer的架构已经成为自然语言处理中的常见选择&#xff0c;并且现在正在计算机视觉任务中实现SOTA性能&#xff0c;例如图像分类&#xff0c;对象检测。然而&#xff0c;卷积方法在3D人体姿态估计的许多方法中仍然保…

java面试题-MySQL相关面试题

MySQL相关面试题 面试官&#xff1a;MySQL中&#xff0c;如何定位慢查询? 候选人&#xff1a; 嗯~&#xff0c;我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系统部署了运维的监控系统Skywalking &#xff0c;在展…

第4章_瑞萨MCU零基础入门系列教程之瑞萨 MCU 源码设计规范

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;List和Set的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流…

STM32WB55开发(3)----断开蓝牙连接

STM32WB55开发----3.断开蓝牙连接 概述硬件准备视频教学样品申请选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_App_NotificationACI_HAL_GET_LINK_STATUShci_disco…

设计模式-组合模式(Composite)

文章目录 前言一、组合模式的概念二、组合模式的优缺点1.优点2.缺点 三、组合模式的实现总结 前言 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树状结构以表示“整体-部分”的层次结构。组合模式使得客户端可以统…