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

动态SQL

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

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

搭建环境

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

创建一个博客表

编写一个博客实体类

编写博客的Mapper接口

创建对应接口的xml文件

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

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

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

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

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

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

编写测试类

插入四条博客数据

if标签测试

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

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

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

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

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

choose标签

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

编写查博客的choose方法

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

set标签测试

编写更新博客的方法

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

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

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

SQL片段

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

Foreach标签

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值