引言
Q:为何使用动态SQL?
A:举例:正常情况下具有多个限制条件的语句是这样的
(查询全班学生名字如果人数等于20人,且如果男生大于女生人数.....)
为了简化这种情况带来的复杂语句编写
1 搭建动态sql环境
2 标签
2.1 if
目的:
没有指明查询什么数据的时候全部查出来;
当指明需要查询某作者,某标题也可以查到对应的数据;
select * from blog where auther=#{auther} and title=#{title}
//但是这样显然不可以满足上述两个条件
这里使用where 1=1的原因:不能这样使用吧(and前面不写东西)
select * from blog where and title=#{title}
所以暂时这样使用(不完全规范)
select * from blog where 1=1
<if test="author != null ">
and author = #{author}
</if>
<if test="title != null ">
and title = #{title}
</if>
map未传入数据的时候可以查到所有的数据
map传入数据的时候
2.2 where
那么不使用where1=1怎么办,Mybatis提供了一个where标签
为什么这个标签会有这个作用呢?
回顾一下,我们是为了避免错误的sql
select * from blog where and title=#{title}
意思是至少满足一个if条件才插入where,只满足一个if条件时候自动去除and/or
传一个参数
传两个参数
不传参数
2.3 choose
相当于switch和case
2.4 set
官网解释了set的作用,验证我们的测试案例
2.5 SQL片段 < include >
经过上述的例子,我们发现在sql语句中的if语句代码是重复的,如果需要写上百个sql语句,代码就显的笨重,所以需要将重复的代码提取出来,作为公共部分调用
尽量最好只包含 if 片段
2.6 Foreach
举例
应用
准备工作:数据库的信息
准备工作:测试一下sql语句的查询结果
3 SUM
动态sql的几个标签已经练习完了,可以发现相比较之前的sql查询,动态sql更灵活,(举例:联想一下浏览器查询功能,输入想要查询的信息就可以查到满足不同条件的信息)
建议:在写动态sql时候,先把完整的sql测试一下
然后在xml使用标签拼接sql命令
有了基础:接下来就是持续提升
- Mysql引擎
- InnoDB底层原理
- 索引
- 索引优化