MyBatis精品教程资料:3.动态SQL
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
更灵活地去除多余关键字 替代where和set
演示示例5:改造用户表的查询操作-if+trim
15/37
trim元素 2-2 if+trim
使用if+trim替代if+set进行更新用户表数据,效果一样
示例
<update id ="modify" parameterType="User">
改造供应商表的修改功能,使用动态SQL完善此功能
提示
修改SQL语句 – 使用if+set组合
完成时间:15分钟
13/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
共性问题集中讲解
14/37
trim元素 2-1
trim
属性
prefix suffix prefixOverrides suffixOverrides
共性问题集中讲解
18/37
foreach元素 4-1
foreach
迭代一个集合,通常用于in条件 属性
item
index
collection:必须指定
list array map-key
open
separator
close
19/37
foreach元素 4-2
需求说明:
指定用户角色(1-n个),获取这些用户角色下的用户列表信息
商品名称(模糊查询) 供应商id 是否付款
查询结果列列表
订单id、订单编码、商品名称、供应商id、供应商名称、订单金 额、是否付款、创建时间
提示 修改SQL语句 – 使用if
完成时间:15分钟
9/37
学员操作—改造供应商表查询(if+where)
练习 需求说明
改造供应商表的查询功能,使用动态SQL完善此功能 查询条件
供应商编码(模糊查询) 供应商名称(模糊查询)
查询结果列列表
供应商id、供应商编码、供应商名称、联系人、联系电话、传真、 创建时间
提示 修改SQL语句 – 使用if+where组合
完成时间:15分钟
10/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
共性问题集中讲解
需求说明:
改造上一个演示示例,使用foreach实现,参数类型改为List
演示示例8:获取指定用户角色下用户列表-foreach_list
21/37
学员操作—获取指定供应商列表下的订单列表 练习 需求说明
指定供应商列表(1-n个),获取这些供应商下的订单列表 信息
11/37
set
问题 更新用户表数据时,若某个参数为null时,会导致更新错误
正确结果
分析 若某个参数为null,则不需要更新,保持数据库原值
原因
SQL语句
如何处理
if set
演示示例4:改造用户表的修改操作-if+set
12/37
学员操作—改造供应商表修改操作 (if+set) 练习 需求说明
4/37
if元素 2-1 需求说明
改造查询用户信息列表的演示示例,增加查询条件
用户角色(根据角色iBiblioteka Baidu查询) 用户名称(模糊查询)
演示示例1:改造用户表的查询操作-多条件查询
5/37
if元素 2-2 问题 当传入用户角色参数为空的时候,检索结果为空?
正确结果
分析
所有用户角色下的用户数据
update smbms_user <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="userCode != null">userCode = #{userCode},</if> <if test="userName!= null">userCode = #{userName },</if> <if test="userPassword!= null">userPassword=#{userPassword },</if> </trim>
动态SQL
本章任务 完成超市订单系统-用户管理功能模块动态SQL的改造 完成超市订单系统-用户列表的分页实现
2/37
本章目标 熟练掌握动态SQL
3/37
动态SQL
基于OGNL表达式 完成多条件查询等逻辑实现 用于实现动态SQL的元素主要有
if trim where set choose(when、otherwise) foreach
如何处理
where 7/37
Where元素 2-2 where
简化SQL语句中where条件判断 智能处理and和or
演示示例3:改造用户表的查询操作-if+where
8/37
学员操作—改造订单表查询 (if)
需求说明
练习 改造订单表的查询功能,使用动态SQL完善此功能 查询条件
原因
select * from smbms_user u,smbms_role r where u.userRole = r.id and u.userName like CONCAT (‘%’, ‘’, ‘%’) and u.userRole = null;
如何处理
if(判断参数):实现简单的条件判断
演示示例2 :改造用户表的查询操作-if
6/37
Where元素 2-1
问题 当只传入参数:用户角色,而不传入参数:用户名称 的时候,控制台报SQL异常错误?
正确结果
分析
指定用户角色下的所有用户数据
原因
select * from smbms_user where and userRole = ?
</update>
演示示例6:改造用户表的修改操作-if+trim
16/37
学员操作—改造供应商表修改操作 (if+trim) 练习 需求说明
改造供应商表的修改功能,使用动态SQL完善此功能
提示
修改SQL语句 – 使用if+trim组合
完成时间:15分钟
17/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
分析 查询SQL语句含有in条件
select * from smbms_user where userRole in (参数1,参数2,参数3…);
使用foreach实现
参数:用户角色列表 参数类型:数组
演示示例7:获取指定用户角色下用户列表-foreach_array
20/37
foreach 4-3
演示示例5:改造用户表的查询操作-if+trim
15/37
trim元素 2-2 if+trim
使用if+trim替代if+set进行更新用户表数据,效果一样
示例
<update id ="modify" parameterType="User">
改造供应商表的修改功能,使用动态SQL完善此功能
提示
修改SQL语句 – 使用if+set组合
完成时间:15分钟
13/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
共性问题集中讲解
14/37
trim元素 2-1
trim
属性
prefix suffix prefixOverrides suffixOverrides
共性问题集中讲解
18/37
foreach元素 4-1
foreach
迭代一个集合,通常用于in条件 属性
item
index
collection:必须指定
list array map-key
open
separator
close
19/37
foreach元素 4-2
需求说明:
指定用户角色(1-n个),获取这些用户角色下的用户列表信息
商品名称(模糊查询) 供应商id 是否付款
查询结果列列表
订单id、订单编码、商品名称、供应商id、供应商名称、订单金 额、是否付款、创建时间
提示 修改SQL语句 – 使用if
完成时间:15分钟
9/37
学员操作—改造供应商表查询(if+where)
练习 需求说明
改造供应商表的查询功能,使用动态SQL完善此功能 查询条件
供应商编码(模糊查询) 供应商名称(模糊查询)
查询结果列列表
供应商id、供应商编码、供应商名称、联系人、联系电话、传真、 创建时间
提示 修改SQL语句 – 使用if+where组合
完成时间:15分钟
10/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
共性问题集中讲解
需求说明:
改造上一个演示示例,使用foreach实现,参数类型改为List
演示示例8:获取指定用户角色下用户列表-foreach_list
21/37
学员操作—获取指定供应商列表下的订单列表 练习 需求说明
指定供应商列表(1-n个),获取这些供应商下的订单列表 信息
11/37
set
问题 更新用户表数据时,若某个参数为null时,会导致更新错误
正确结果
分析 若某个参数为null,则不需要更新,保持数据库原值
原因
SQL语句
如何处理
if set
演示示例4:改造用户表的修改操作-if+set
12/37
学员操作—改造供应商表修改操作 (if+set) 练习 需求说明
4/37
if元素 2-1 需求说明
改造查询用户信息列表的演示示例,增加查询条件
用户角色(根据角色iBiblioteka Baidu查询) 用户名称(模糊查询)
演示示例1:改造用户表的查询操作-多条件查询
5/37
if元素 2-2 问题 当传入用户角色参数为空的时候,检索结果为空?
正确结果
分析
所有用户角色下的用户数据
update smbms_user <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="userCode != null">userCode = #{userCode},</if> <if test="userName!= null">userCode = #{userName },</if> <if test="userPassword!= null">userPassword=#{userPassword },</if> </trim>
动态SQL
本章任务 完成超市订单系统-用户管理功能模块动态SQL的改造 完成超市订单系统-用户列表的分页实现
2/37
本章目标 熟练掌握动态SQL
3/37
动态SQL
基于OGNL表达式 完成多条件查询等逻辑实现 用于实现动态SQL的元素主要有
if trim where set choose(when、otherwise) foreach
如何处理
where 7/37
Where元素 2-2 where
简化SQL语句中where条件判断 智能处理and和or
演示示例3:改造用户表的查询操作-if+where
8/37
学员操作—改造订单表查询 (if)
需求说明
练习 改造订单表的查询功能,使用动态SQL完善此功能 查询条件
原因
select * from smbms_user u,smbms_role r where u.userRole = r.id and u.userName like CONCAT (‘%’, ‘’, ‘%’) and u.userRole = null;
如何处理
if(判断参数):实现简单的条件判断
演示示例2 :改造用户表的查询操作-if
6/37
Where元素 2-1
问题 当只传入参数:用户角色,而不传入参数:用户名称 的时候,控制台报SQL异常错误?
正确结果
分析
指定用户角色下的所有用户数据
原因
select * from smbms_user where and userRole = ?
</update>
演示示例6:改造用户表的修改操作-if+trim
16/37
学员操作—改造供应商表修改操作 (if+trim) 练习 需求说明
改造供应商表的修改功能,使用动态SQL完善此功能
提示
修改SQL语句 – 使用if+trim组合
完成时间:15分钟
17/37
共性问题集中讲解 常见问题及解决办法 代码规范问题 调试技巧
分析 查询SQL语句含有in条件
select * from smbms_user where userRole in (参数1,参数2,参数3…);
使用foreach实现
参数:用户角色列表 参数类型:数组
演示示例7:获取指定用户角色下用户列表-foreach_array
20/37
foreach 4-3