Mybatis学习三(动态sql语句)
动态sql语句主要为以下语句
1、动态SQL:if 语句
2、动态SQL:if+where 语句
3、动态SQL:if+set 语句
4、动态SQL:choose(when,otherwise) 语句
5、动态SQL:trim 语句
6、动态SQL: SQL 片段
7、动态SQL: foreach 语句
之前的几篇学习博客我用mybatis对一张表进行的CRUD操作,但是 SQL 语句都比较简单,如果有比较复杂的 SQL 语句,经常需要拼接,而拼接 SQL稍微不注意就容易出错此时我们可以用mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签来解决这个问题,这几个标签可组合成非常灵活的SQL语句,用起来也是很舒服
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4 <!-- namespace:表示名称空间。现在的目的是区分id的. -->
5 <mapper namespace="com.zhiyou100.zhl.dao.UsersDao">
6 <sql id="detail">
7 id,name,age,sex,day
8 </sql>
9
10 <select id="selByWhere" resultType="com.zhiyou100.zhl.bean.Users">
11 select * from users
12 <where>
13 <if test="name!=null">
14 and name=#{name}
15 </if>
16 <if test="sex!=null and sex!=''">
17 and sex=#{sex}
18 </if>
19 </where>
20 </select>
21
22 <update id="updateWhere">
23 update users
24 <set>
25 <if test="name!=null">
26 name=#{name},
27 </if>
28 <if test="sex!=null">
29 sex=#{sex},
30 </if>
31 <if test="age>0">
32 age=#{age},
33 </if>
34 <if test="day!=null">
35 day=#{day}
36 </if>
37 </set>
38 where id=#{id}
39 </update>
40
41 <select id="selByWhere2" resultType="com.zhiyou100.zhl.bean.Users">
42 select
43 <include refid="detail"/>
44 from users
45 <where>
46 <choose>
47 <when test="name!=null and name!=''">
48 name like concat('%',#{name},'%')
49 </when>
50 <when test="sex!=null and sex!=''">
51 sex=#{sex}
52 </when>
53 <otherwise>
54 age>=#{age}
55 </otherwise>
56 </choose>
57 </where>
58 </select>
59
60 <select id="selByWhere3" resultType="com.zhiyou100.zhl.bean.Users">
61 select
62 <include refid="detail"/>
63 from users
64 <trim prefix="where" prefixOverrides="and | or">
65 <if test="name!=null and name!=''">
66 and name=#{name}
67 </if>
68 <if test="sex!=null and sex!=''">
69 and sex=#{sex}
70 </if>
71 <if test="age>0">
72 and age=#{age}
73 </if>
74 <if test="day!=null and day!=''">
75 and day=#{day}
76 </if>
77 </trim>
78 </select>
79
80 <update id="updateWhere2">
81 update users
82 <trim prefix="set" suffixOverrides=",">
83 <if test="name!=null">
84 name=#{name},
85 </if>
86 <if test="sex!=null">
87 sex=#{sex},
88 </if>
89 <if test="age>0">
90 age=#{age},
91 </if>
92 <if test="day!=null">
93 day=#{day}
94 </if>
95 </trim>
96 where id=#{id}
97 </update>
98
99 <delete id="deleteByIds">
100 delete from users
101 <where>
102 <foreach collection="ids" open="id in(" close=")" separator="," item="id">
103 #{id}
104 </foreach>
105 </where>
106 </delete>
107
108
109 <delete id="deleteByIds2">
110 delete from users where id in
111 <foreach collection="ids" open="(" close=")" separator="," item="id">
112 #{id}
113 </foreach>
114 </delete>
115
116
117 </mapper>
Mybatis学习三(动态sql语句)的更多相关文章
- mybatis 学习五 动态SQL语句
3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使用myBatis的selectKey ...
- Mybatis映射文件动态SQL语句-01
因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...
- mybatis学习之动态sql
mybatis的动态sql语句很强大,在mapper映射文件中使用简单的标签即可实现该效果,下面一个个记录: 1.select查询 简单的select类似如下: <select id=" ...
- mybatis中的动态SQL语句
有时候,静态的SQL语句并不能满足应用程序的需求.我们可以根据一些条件,来动态地构建 SQL语句. 例如,在Web应用程序中,有可能有一些搜索界面,需要输入一个或多个选项,然后根据这些已选择的条件去执 ...
- MyBatis之五:动态sql语句
在mybatis 3 或以上的版本提供了4类标签,分别是:if,choose(when,otherwise),rim(where,set),foreach.接下来将分别介绍这几种标签的具体用法,映射x ...
- mybatis学习 十 动态 SQL
1. 根据方法传入的参数不同执行不同的 SQL 命令.称为动态 SQL, MyBatis 中动态 SQL 就是在 mapper.xml 中添加逻辑判断等. 2. <if>标签 <s ...
- Mybatis学习笔记-动态SQL
概念 根据不同环境生成不同SQL语句,摆脱SQL语句拼接的烦恼[doge] 本质:SQL语句的拼接 环境搭建 搭建数据库 CREATE TABLE `blog`( `id` VARCHAR(50) N ...
- 阶段3 1.Mybatis_08.动态SQL_01.mybatis中的动态sql语句-if标签
创建新的工程 复制到新建的项目里面 pom.xml依赖部分复制过来 dao中整理代码 只保留四个查询 映射文件也只保留四个查询方法 增加一个根据条件查询的方法. 由于用了别名,所以parpameter ...
- Mybatis映射文件动态SQL语句-02
foreach UserMapper.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...
- MyBatis学习 之 三、动态SQL语句
目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...
随机推荐
- AI实用指南:5分钟搭建你自己的LLM聊天应用
今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括--快.在这个快节奏的时代,构建一个基础的LLM(Large Language Model,大型语言模型)聊天应用 ...
- KingbaseESV8R6中查看索引常用sql
前言 KingbaseES具有丰富的索引功能,对于运行一段时间的数据库,经常需要查看索引的使用大小,使用状态等. 尤其重复索引的存在,有时会因为索引过多而造成维护成本加大和减慢数据库的运行速度. 下面 ...
- 22 axios和axios拦截器
1. axios 由于jquery有严重的地狱回调逻辑. 再加上jquery的性能逐年跟不上市场节奏. 很多前端工程师采用axios来发送ajax. 相比jquery. axios更加灵活. 且容易使 ...
- Jetty的threadpool模块
Jetty提供的线程池相关的模块,如下: threadpool threadpool-virtual,使用JDK 21提供的virtual threads. threadpool-virtual-pr ...
- 赵海鹏:如何进行 OpenHarmony 音频特性架构设计和开发工作
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 赵海鹏 江苏润和软 ...
- openEuler20.03操作系统上安装部署MogDB2.1.1
openEuler20.03 操作系统上安装部署 MogDB2.1.1 本文出处:https://www.modb.pro/db/378319 openEuler 操作系统上安装 mogdb: 下载 ...
- 比nestjs更优雅的ioc:跨模块访问资源
使用ts的最佳境界:化类型于无形 在项目中使用ts可以带来类型智能提示与校验的诸多好处.同时,为了减少类型标注,达到化类型于无形的效果,CabloyJS引入了ioc和依赖查找的机制.在上一篇文章中,我 ...
- 基于 Java 编程生成二维码图片
0x01 准备 (1)软件版本 IntelliJ IDEA 2023.1.3 JDK 18 Tomcat 10.1.11 Maven 3.8.6 (2)技术栈 servlet zxing 谷歌项目 生 ...
- sql 语句系列(删库跑路系列)[八百章之第七章]
前言 最开心的章节,没有之一. 删除违反参照完整性的记录 EMP 是员工表,DEPT 是部门表 DEPTNO是部门编号 delete from EMP where not exists ( selec ...
- ubuntu 20.04.1 安装 PHP+Nginx
ubuntu 20.04.1 安装 PHP+Nginx 更新源 sudo apt-get update 安装环境包 sudo apt-get -y install nginx sudo apt-get ...