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 ...