react-smooth-dnd 拖拽实例(react-smooth-dnd 列表排序)
261
2022-08-16
MyBatis 超详细讲解动态SQL的实现
目录情景:概述:SQL元素:
情景:
我们在使用JDBC或者其他类似的框架开发进行数据库开发时,通常要根据需求动手组装SQL,不用想都觉得是件很痛苦的事情了,而Mybatis框架提供的对SQL语句动态组装的功能,能很好地解决这个麻烦。
概述:
动态SQL是MyBatis框架的一个强大特性,MyBatis3可采用功能强大的基于OGNL的表达式来完成动态SQL,它删除了之前版本中需要了解的大多数元素,只使用不到原来一半的元素就能完成所需的工作。
SQL元素:
SQL元素说明
使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from t_book
id=#{id}
select * from t_book
bookName LIKE concat('%',#{bookName},'%')
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
因为自己写的是单查询,引用官网代码。
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE'
AND title like #{title}
AND author_name like #{author.name}
AND featured = 1
这个标签我觉得是最灵活的,trim元素也会自动识别其标签内是否有返回值,若有的话,则会在已包含的内容前加上某些前缀或者后缀(先判断是否有语句包含),用到的属性是
1、prefix(前缀),suffix(后缀)
还可以把包含内容的首内容或尾内容的符号去掉,用到的属性是
2、prefixOverride(前缀覆盖),suffixOverride(后缀覆盖)
可以说功能很强大,可以利用它来替代where元素,并实现与where元素相同的效果。
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
UPDATE t_book
WHERE id=#{id}
set元素主要用于更新操作,它的主要功能和where元素差不多,主要是包含的语句前输入一个set,若包含的语句以逗号结束,则会自动把括号忽略掉,再配合if元素就可以动态地更新需要修改的字段;若不需要更改字段,则可以不再被更新。
把上面的代码修改一下:
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
UPDATE t_book
WHERE id=#{id}
foreach元素通常在构建in条件语句时使用,其使用方式如下。
(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
open="ID in (" separator="," close=")" nullable="true"> #{item}
open="ID in (" separator="," close=")" nullable="true">
#{item}
bind元素通常用于需要模糊查询的语句中,使用bind元素定义了一个name为pattern_username的变量,value的属性值就是拼接的查询字符串,其中_parameter.getTitle()表示传递进来的参数(也可以直接写成对应的参数变量名,如username)。
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~