02 - Unit09:动态SQL
动态SQL
什么是?
系统运行过程中,动态生成的SQL语句
为什么?
当我们不能确定用户操作,所要使用的具体SQL的时候.
案例: 搜索笔记功能 按用户名 笔记本名 笔记名 搜索
搜索功能 按用户 A B C
select * from cn_note where userName=#{} and bookName=#{} and noteTitle=#{}
如何实现?
{id}
if标签
if起到选择判断的作用
语法:
应用:
<select id="findNotes" parameterType="Map">
select * from cn_note
where cn_note_status_id="1"
<if test="userName!=null">
and cn_user_name=#{userName}</if>
<if test="bookName!=null">
and cn_notebook_name=#{bookName}</if>
<if test="noteName!=null">
and cn_note_name=#{noteName}</if>
</select>
相当于JAVA中的switch语句,当匹配(when)到符合条件的语句后,直接输入,结束匹配;
当没有匹配到任何条件,最后输出otherWise
语法:
<choose>
<when test=""></when>
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>
</choose>
where/set
在开始标签的位置自动输入 where关键字.
在拼凑SQL语句的过程中,会自动处理多余的and/or/空格.
语法:
<where>
<if test=""></if>
<if test=""></if>
</where>
<set>
<if test=""></if>
<if test=""></if>
</set>
trim
语法:
<trim prefix="where" prefixOverrides="and/or"></trim>
练习:批量删除笔记
delete from cn_note where cn_note_id
in (#{id1},#{id2},#{id3}.....)
<foreach collection="list/array"
item="id"
open="("
close=")"
separator=",">
#{id}
</foreach>
组合查询笔记的功能
标题 状态 开始时间 结束时间 搜索按钮
搜索列表
标题 状态 创建时间
发送Ajax请求
绑定事件:搜索按钮的单击事件
获取参数:标题 状态 开始时间 结束时间
请求地址:/note/manage.do
服务器处理
- Controller.find(String userId,String title,String
status,Stringbegin,String end)
- Service.find(String userId,String title,String status,
String begin,String end)
NoteDao.findNotes(Map params)
Mapper select * from cn_note 动态SQL
Ajax回调处理
- success
遍历返回的数据集合,显示在结果列表中
- error
提示:搜索失败
作业:重构搜索笔记需求的mapper定义
使用
使用
02 - Unit09:动态SQL的更多相关文章
- mybatis——动态sql
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) ...
- 动态游标(例如表名作为参数)以及动态SQL分析
表名作为参数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SYS_REFCURSOR; T ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- 两种动态SQL
参考:http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlhttp://www.cnblogs.com/xbf321/arch ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...
- db2存储过程动态sql被截断
编写存储过程,使用动态sql时,调试时发现变量赋值后被截断. 关键代码如下: 实现的效果是先把上下游做对比的sql语句和相关参数存入RKDM_DATA_VOID_RULE, 执行存储过程后把两个sql ...
- (2.3)DDL增强功能-流程化控制与动态sql
1.流程控制 在T-SQL中,与流程控制语句相关的关键字有8个: BEGIN...END BREAK GOTO CONTINUE IF...ELSE WHILE RETURN WAITFOR 其实还可 ...
- 动态游标(比如表名作为參数)以及动态SQL分析
表名作为參数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SYS_REFCURSOR; T ...
- mysql 存储过程中使用动态sql语句
Mysql 5.0 以后,支持了动态sql语句,我们可以通过传递不同的参数得到我们想要的值 这里介绍两种在存储过程中的动态sql: set sql = (预处理的sql语句,可以是用concat拼接的 ...
随机推荐
- zabbix负载均衡群集高可用架构
由于服务器资源限制,将MySQL服务放在zabbix服务器上,生产环境应尽量分开
- 《Effective Java 2nd》第4章 类和接口
目录 第13条: 使类和成员的可访问性最小化 第14条:在公有类中使用访问方法而非公有域 第15条:使可变性最小化 第16条:复合优先于继承 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承 ...
- fiddler几种功能强大的用法(二)
参考网址:http://blog.rekfan.com/articles/228.html http://www.cnblogs.com/tugenhua0707/p/4637771.html htt ...
- Symmetric Tree,对称树
问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...
- vue项目打包部署到nginx 服务器上
假如要实现的效果如下 http://ip/vue =>是进入首页访问的路径是 usr/local/nginx/html/vue http://ip/website =>是进 ...
- hive grouping sets 等聚合函数
函数说明: grouping sets 在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union allcube 根据 group b ...
- poj1459网络流之多源点最大流
这题想了好久,一直认为应该bfs更新后求最小值把发电站最大发电加进去,但是又发现这样求增广路的时候会导致用户更新出错, 加源点和汇点也考虑到了,没想到居然发电量就是超级源到源点的v,居然这么简单@.@ ...
- link @import区别 src href的区别
先说页面引入css的四种方式吧 1 在头部写在style里面 2 行内样式 tyle= 3 外部引入 link和@import的区别 link属于XHTML的标签,而@import只是css提供的一种 ...
- MsWord 操作总结
转自(http://www.cnblogs.com/eye-like/p/4121219.html) Msdn上的word操作api(不过只有英文版,英文差的先闪过) Word2007的API:htt ...
- Centos7 firewalld命令行
使用命令行管理firewall之前,说明有关于防火墙的策略独立性:明确的策略,策略之间无关联. 比如mysql使用3306,firewall添加mysql服务但未添加3306,当查询3306端口状态会 ...