动态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的更多相关文章

  1. mybatis——动态sql

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) ...

  2. 动态游标(例如表名作为参数)以及动态SQL分析

    表名作为参数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SYS_REFCURSOR; T ...

  3. 超全MyBatis动态SQL详解!( 看完SQL爽多了)

    MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...

  4. 两种动态SQL

    参考:http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlhttp://www.cnblogs.com/xbf321/arch ...

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

  6. db2存储过程动态sql被截断

    编写存储过程,使用动态sql时,调试时发现变量赋值后被截断. 关键代码如下: 实现的效果是先把上下游做对比的sql语句和相关参数存入RKDM_DATA_VOID_RULE, 执行存储过程后把两个sql ...

  7. (2.3)DDL增强功能-流程化控制与动态sql

    1.流程控制 在T-SQL中,与流程控制语句相关的关键字有8个: BEGIN...END BREAK GOTO CONTINUE IF...ELSE WHILE RETURN WAITFOR 其实还可 ...

  8. 动态游标(比如表名作为參数)以及动态SQL分析

    表名作为參数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SYS_REFCURSOR; T ...

  9. mysql 存储过程中使用动态sql语句

    Mysql 5.0 以后,支持了动态sql语句,我们可以通过传递不同的参数得到我们想要的值 这里介绍两种在存储过程中的动态sql: set sql = (预处理的sql语句,可以是用concat拼接的 ...

随机推荐

  1. 20145120 《Java程序设计》实验五实验报告

    20145120 <Java程序设计>实验五实验报告 实验名称:Java网络编程 实验内容: 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验内容. ...

  2. Kali2018.1

    目录 制作U盘启动盘 安装 Kali Linux 之后的事 更新源 配置 Zsh 配置 Vim 修改 Firefox 语言为中文 安装 Gnome 扩展 美化 安装 Google 拼音输入法 安装常用 ...

  3. ccf 行车路线

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  4. OpenDayLight Helium实验一 OpenDaylight的C/S模式实验

    本文基于:OpenDaylight的C/S模式实验而成 C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Ser ...

  5. Android -- Activity的生命周期,Activity四种启动模式 Standard, SingleTop,SingleTask,SingleInstance

    1. 示例图 . 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:  Activity的完整生命周期自第一次调用onCreate()开始,直至调 ...

  6. 3个方法实现JavaScript判断移动端及pc端访问不同的网站

    3个方法比较简单,分别在页面头部加入如下js代码: 对于简单地直接从www.maslinkcom跳转到m.maslink.com,此方法仅从首页而言: <script>(function ...

  7. 一定要用Windows自带的记事本编辑 applicationHost.config

    访问IIS时,发生了一个 HipIISEngineStub.dll不能读取的问题.(Windows Event可以确认). 很容易在网上找到了对策, http://chrisfleischhacker ...

  8. Python 实现图片上表格的写入

    直接上代码:import matplotlib.pylab as pltimport numpy as npplt.figure()axes=plt.gca()y= np.random.randn(9 ...

  9. poj3281网络流之最大流

    加一个源点和汇点,把每头牛拆成两个点,不拆点的话可能会出现多对食物与饮料被一个牛享用的情况,拆点后流量为1,不能同时通过了 然后用最大流处理,每个链接边都是1 #include<map> ...

  10. Linux下weblogic启动报错unable to get file lock的问题

    非正常结束weblogic进程导致weblogic无法启动 由于先前服务器直接down掉了,所有进程都非正常的进行关闭了,也就导致了下次启动weblogic的时候报了以下错误:<2012-3-2 ...