MyBatis
动态sql
什么是动态sql
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形
简单案例分析
需求分析:用户信息综合查询列表和用户信息查询列表总数这两个Statement的定义使用动态sql完成
- Mapper.xml中定义
![07fbe8362642412df54d7fed2bfc7e5f.png](https://i-blog.csdnimg.cn/blog_migrate/8a8cac56c6f70a750cdbeb54116a5798.png)
![c375c5600d5db3c58d682eb8d7842eea.png](https://i-blog.csdnimg.cn/blog_migrate/d7be4a7ac4fd4bb56d022a24ac772f7c.png)
- Mapper.java中添加方法
![e20f1d448d38084c9dad2abe35d3227f.png](https://i-blog.csdnimg.cn/blog_migrate/de9fce2c5203dca0a87c58150c78d23d.png)
- 在sqlMapConfig.xml中加载配置文件并编写测试代码进行测试
(此处使用的是上述案例中测试的代码,结果正常显示不再赘述)
Sql片段
需求分析:针对上方的简单案例分析,可以把公共的代码片段抽离成一个独立的sql片段,从而简化开发
![ab4ac17b256bd9dacf1a50490fc67ae9.png](https://i-blog.csdnimg.cn/blog_migrate/145e568ded3a37968de1c424b4af0fde.png)
![3a92c25c804070e5ab012cee2fa64f03.png](https://i-blog.csdnimg.cn/blog_migrate/28f076cc02cd31922a91db39a2d5611d.png)
Mapper.xml中替换成如下的内容,其余基本的数据保持不变参考上述案例进行测试,结果正常显示,此处不再赘述
![6312b508ee1a1e42b388fbdb1802e799.png](https://i-blog.csdnimg.cn/blog_migrate/a6e69fb05e67ebf76dfc8c8e878188b0.png)
![e1e48fd7d86ecd2fe0217e3b9cf29584.png](https://i-blog.csdnimg.cn/blog_migrate/0026e044eb80712158e414d4be1d1685.png)
Foreach 遍历
需求分析:查询指定用户的id为 1 、10 、16 的用户信息
查询语句分析如下:
select * from user where (id=1 or id=10 or id =16)
Select * from user where id in(1,10,16)
- UserQueryVO中添加查询条件List<Integer> ids(即根据id列表进行查找)
![6d699dc2e0f93de8e16a86989af9679d.png](https://i-blog.csdnimg.cn/blog_migrate/50582b2f5f2c20f04bf6e71466fe06fc.png)
- 指定mapper.xml中添加配置如下所示
![ca0177319070a4cda8190a8699363053.png](https://i-blog.csdnimg.cn/blog_migrate/965974a96b2b72d2ce12c800331714c1.png)
![9533831376c3c8d5b568a0475a965a2f.png](https://i-blog.csdnimg.cn/blog_migrate/e746627db35443110b179d0b3b28bafb.png)
- 指定mapper.java中添加方法
![b7a0b44837b246727f63262a2b937a71.png](https://i-blog.csdnimg.cn/blog_migrate/f9679909635008f452a457dea246a15b.png)
- 在sqlMapConfig.xml中加载配置文件并编写测试代码进行测试
![857628abb00b15eee8afe7b4c217a3af.png](https://i-blog.csdnimg.cn/blog_migrate/56553ea48b738b33c65cf5a244b5bb72.png)
测试结果:
![6aa1757c3c4879e6f9d68f53ccb461ec.png](https://i-blog.csdnimg.cn/blog_migrate/15908867fdb4583a143843da2dda42ce.png)