MyBatis|MyBatis 超详细讲解动态SQL的实现
目录
- 情景:
- 概述:
- SQL元素:
: : : : - :
: :
情景: 我们在使用JDBC或者其他类似的框架开发进行数据库开发时,通常要根据需求动手组装SQL,不用想都觉得是件很痛苦的事情了,而Mybatis框架提供的对SQL语句动态组装的功能,能很好地解决这个麻烦。
概述: 动态SQL是MyBatis框架的一个强大特性,MyBatis3可采用功能强大的基于OGNL的表达式来完成动态SQL,它删除了之前版本中需要了解的大多数元素,只使用不到原来一半的元素就能完成所需的工作。
SQL元素:
SQL元素 | 说明 |
---|---|
判断语句,用于单条件分支判断 | |
相当于Java中的switch...case...default语句,用于多条件分支判断 | |
简化SQL语句中的where的条件判断 | |
可以灵活地去除多余的关键字 | |
解决动态更新语句 | |
循环语句,常用于in语句等列举条件中 | |
从OGNL表达式中创建一个变量,并将其绑定到上下文,常用于模糊查询的SQL中 |
select * from t_book select * from t_book id=#{id} bookName LIKE concat('%',#{bookName},'%')
因为自己写的是单查询,引用官网代码。
SELECT * FROM BLOG WHERE state = ‘ACTIVE'AND title like #{title} AND author_name like #{author.name} AND featured = 1
【MyBatis|MyBatis 超详细讲解动态SQL的实现】 1、prefix(前缀),suffix(后缀)
还可以把包含内容的首内容或尾内容的符号去掉,用到的属性是
2、prefixOverride(前缀覆盖),suffixOverride(后缀覆盖)
可以说功能很强大,可以利用它来替代where元素,并实现与where元素相同的效果。
UPDATE t_book bookName=#{bookName}, price=#{price}, publisher=#{publisher} WHERE id=#{id}
: set元素主要用于更新操作,它的主要功能和where元素差不多,主要是包含的语句前输入一个set,若包含的语句以逗号结束,则会自动把括号忽略掉,再配合if元素就可以动态地更新需要修改的字段;若不需要更改字段,则可以不再被更新。
把上面的代码修改一下:
UPDATE t_book bookName=#{bookName}, price=#{price}, publisher=#{publisher}, WHERE id=#{id}
(1).item: 表示每个元素迭代时的别名。
(2).index: 指定一个名称,用于表示在迭代过程中每次迭代的位置
(3).open: 表示该语句以什么开始(in语句以“( ”开始)
(4).separator: 表示每次进行迭代时以上面符号作为分隔符(in语句以“ ,”作为分隔符)
(5).close: 表示该语句以什么结束(in语句以“ )”结束)
(注意:这个open,separator,close基本上就是固定格式了)
(6).collection: 表示最关键且最容易出错的属性,需格外注意。该属性必须指定,不同情况下该属性的值是不一样的,主要有三种情况:
1).若入参为单参数且参数类型是一个list时,collection属性值为list
2).若入参为单参数且参数类型是一个数组时,collection属性值为array
3).若入参为多参数,需要将其封装为一个Map进行处理
格式:
SELECT *FROM POST P#{item}
SELECT * FROM BLOGWHERE title LIKE #{pattern}
到此这篇关于MyBatis 超详细讲解动态SQL的实现的文章就介绍到这了,更多相关MyBatis 动态SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- MyBatis查询数据|MyBatis查询数据,赋值给List集合时,数据缺少的问题及解决
- 超详细汇总21个值得收藏的mysql优化实践
- mybatis中数据加密与解密的实现
- python变量命名的正则表达式_比较详细Python正则表达式操作指南(re使用)
- java|Ubuntu下单机安装Hadoop详细教程(附所需安装包下载)
- Java编程开发|点击a超链接 下载而不是直接打开
- C语言结构体(struct)的详细讲解
- 《Mybatis|《Mybatis 手撸专栏》第2章(创建简单的映射器代理工厂)
- 超级实习生|字节跳动-后端开发岗最新春招面经分享,四面拿下,有惊无险
- 超级实习生|“进厂”第一课(大厂Java岗实习要求大盘点(内附2022/2023校招渠道整理))