(狂神)mybatis笔记-----09

12.动态SQL

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

利用动态 SQL,可以彻底摆脱这种痛苦。

如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

搭建环境

 创建一个基础工程

1.导包

2.编写配置文件

3.编写实体类

 

4.编写实体类对应的Mapper接口和Mapper.xml文件

我们这里存在数据库字段名和实体类属性名不一致的情况:

所以我们要使用到xml里的配置

核心配置文件中配置:

 

 

添加数据:

接口:

xml:

 

测试:

 

 

 

 

IF

接口:

 xml:

测试:

查询全部:

 

 

按照title查询:

 

 

 

 根据title和author查询;

 

根据author查询:

 

trim(where, set)

 where标签:

where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。(可以用于代替where 1=1)

改写上一个代码(if):

 

 

 我们发现它自动去除了and

如果我们什么都不传:

我们来看看输出的结果:

 

它可以自动把where去掉

 

choose(when,otherwise) 

接口:

 xml:

不加title和author的查询(按views查询):

 

 

 

现在同时传title和views

 

我们发现我们此时title条件满足,就不再判断views了

三个参数都传递时:

 

 同理,只要满足一个条件,它就结束了。

 

第一个条件不满足就去判断第二个条件

set:

接口:

 

更改信息操作:

原表:

 

xml:

 

 

 

测试:

 

 

 

 

 只改作者名字:

 

 

trim:很少用

所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码

if

where,set,choose,when

SQL片段

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

 

 

 注意事项:

最好基于单表来定义SQL片段

不要存在where标签

Foreach

 

 接口:

xml:

 

 

 测试:

 

没有加入id条件时:

 

能查到全部信息,where自动省略

 

 

 

 

 

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

建议:

先在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值