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拼接的 ...
随机推荐
- MFC读写EXIF信息,图片非占用
MFC读写EXIF信息 读取有类库可以直接调用,网络上有直接可以用的:但是写Exif的资料非常少,我花了一点时间研究收集,终于成功. 将相关的资料共享.主要是借助gdi+,需要注意的地方很多 // ...
- #include <ntifs.h>出现PEPROCESS redefinition问题处理
转载:http://blog.csdn.net/ytfrdfiw/article/details/23334297 如果在自己的程序中,即包含ntddk.h和ntifs.h的时候,编译的时候会出现如下 ...
- 解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题
mybatis中mapUnderscoreToCamelCase的使用 mybatis-config.xml配置: <?xml version="1.0" encoding= ...
- Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...
- 利用HTML中map标签实现整张图片带有可点击区域的图像映射:
实现效果说明:一整张背景图片,实现图标区域出现链接,可点击跳转到指定页面. <div class="brand"> <img src="images/b ...
- thinkphp5中的配置如何使用
thinkphp5中的配置如何使用 一.总结 一句话总结:先加载配置,然后读取配置即可 加载配置 读取配置 Config::load(APP_PATH.'fry_config.php');\\加载配置 ...
- 雷林鹏分享:Ruby 多线程
Ruby 多线程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程. Ruby 中我们可以通 ...
- java裁剪图片
java裁剪图片保存到指定位置 /** * 图片裁剪通用接口 * * @param src 源图片地址,图片格式PNG * @param dest 目的图片地址 * @param x 图片起始点x坐标 ...
- java 8 日期api
//localdatetime -> string LocalDateTime now = LocalDateTime.now(); String format = now.format(Dat ...
- springboot搭建的2种方式
一.搭建springboot项目有两种方式1.继承springboot项目 <parent> <groupId>org.springframework.boot</gro ...