栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(狂神)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实现通用即可!

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号