Mybatis学习|动态sql、动态sql标签

动态SQL

什么是动态SQL: 动态SQL就是指根据不同的条件生成不同的SQL语句

动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了!

搭建环境

创建一个基础工程
1.导包
2.编写配置文件
3.编写实体类
4.编写实体类对应Mapper接口和Mapper.XML文件

创建一个博客表

Mybatis学习|动态sql、动态sql标签_第1张图片

编写一个博客实体类

Mybatis学习|动态sql、动态sql标签_第2张图片

编写博客的Mapper接口

Mybatis学习|动态sql、动态sql标签_第3张图片

创建对应接口的xml文件

Mybatis学习|动态sql、动态sql标签_第4张图片

在mybatis-config核心配置文件中注册这个Mapper接口

Mybatis学习|动态sql、动态sql标签_第5张图片

编写一个id的随机生成工具类

Mybatis学习|动态sql、动态sql标签_第6张图片

实体类中时间字段和数据库中时间字段名字不一致

Mybatis学习|动态sql、动态sql标签_第7张图片

在核心配置文件中配置该方法解决该问题(虽然对于后面操作不配也行,不影响 )

Mybatis学习|动态sql、动态sql标签_第8张图片

在Mapper接口中编写插入博客的方法

Mybatis学习|动态sql、动态sql标签_第9张图片

xml文件中编写对应的sql语句

Mybatis学习|动态sql、动态sql标签_第10张图片

编写测试类

Mybatis学习|动态sql、动态sql标签_第11张图片

插入四条博客数据

if标签测试

在Mapper接口中编写查询博客的方法

Mybatis学习|动态sql、动态sql标签_第12张图片

xml中对应的sql,if标签用来根据不同的参数情况拼接对应的sql,

Mybatis学习|动态sql、动态sql标签_第13张图片

也可把where也写成标签,更加优化,如果是第一个还会自动消除and,where条件都不满足,可以自动不加where

Mybatis学习|动态sql、动态sql标签_第14张图片

编写测试类,此时,map不加任何东西,也就是这里两个if都不走,相当于不拼接,查出所有四条

Mybatis学习|动态sql、动态sql标签_第15张图片

Mybatis学习|动态sql、动态sql标签_第16张图片

在map中添加一个title参数,则sql走title不空,后面拼接上and title = ?,查出一条文章名为Java如此简单的博客

Mybatis学习|动态sql、动态sql标签_第17张图片

choose标签

满足条件只走一个,不会走多个满足,多个满足,也只走第一个

编写查博客的choose方法

Mybatis学习|动态sql、动态sql标签_第18张图片

xml中编写内容title不空,直接就拼第一个sql,不走下面的when了,哪个when先满足,就只拼接哪个when里的sql

Mybatis学习|动态sql、动态sql标签_第19张图片

set标签测试

编写更新博客的方法

Mybatis学习|动态sql、动态sql标签_第20张图片

xml编写,利用set标签,可拼接更新的字段内容,当set中if满足的只有一个时,也会消除其后面多余的逗号

Mybatis学习|动态sql、动态sql标签_第21张图片

编写相应的测试类,因为我们在map中设置了title,和author的内容,所以在sql中也拼接了set标签中两个if的sql

Mybatis学习|动态sql、动态sql标签_第22张图片

如果我们只在map中添加title的内容,没加author的内容,则set标签中的第二个if不满足,则不走,sql只拼接第一个if中的sql,而且通过日志可以发现,它自动消除了其后面多余的逗号。

Mybatis学习|动态sql、动态sql标签_第23张图片

SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用!

Mybatis学习|动态sql、动态sql标签_第24张图片

Foreach标签

编写查询1,2,3号博客的方法

Mybatis学习|动态sql、动态sql标签_第25张图片

编写对应的xml,该标签有点类似于遍历,ids是map中我们定义的一个集合,id,为集合里的一个元素,sql每次都拼接一个开始为“(”,内容为id=id值,且每次遍历的内容都用or连接,遍历所有结束后结束再连接一个“)”

Mybatis学习|动态sql、动态sql标签_第26张图片

编写测试类,在map中加入一个集合大小为2的ids,可以看到最后的sql拼接了两个id = ?,集合大小为多少,就会拼接几个

Mybatis学习|动态sql、动态sql标签_第27张图片

你可能感兴趣的:(SSM,mybatis,学习,sql,java,后端)