文章目录
- 一、choose 元素
- 二、where, trim, set元素:
-
- 1.where 元素:
- 2. trim 元素:
- 3.set 元素
- 三、foreach元素:
- 四、bind 元素
- 五、include标签
提示:以下是本篇文章正文内容,下面案例可供参考
一、choose 元素
它有点像 Java 中的 switch 语句。
但是这次变为提供了"title"就按"title"查找,提供了"author"就按"author"查找,若两者都没有提供,就返回所有符合条件的BLOG。
choose, when, otherwise元素。代码如下(示例):
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
二、where, trim, set元素:
1.where 元素:
where 元素知道只有在一个以上的if条件有值的情况下才去插入"WHERE"子句。而且,若最后的内容是"AND"或"OR"开头的,where 元素也知道如何将他们去除。
2. trim 元素:
和 where 元素等价的自定义 trim 元素
代码如下(示例):
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它带来的结果就是所有在 prefixOverrides 属性中指定的内容将被移除,并且插入 prefix 属性中指定的内容。
trim标签有4个属性:
prefix:当trim元素内包含内容时,会给内容增加prefix指定的前缀。
prefixOverrides:当trim元素内包含内容时,会把内容中匹配的前缀字符串去掉。
suffix:当trim元素内包含内容时,会给内容增加suffix指定的后缀。
suffixOverrides:当trim元素内包含内容时,会把内容中匹配的后缀字符串去掉。
3.set 元素
三、foreach元素:
foreach 元素,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。
foreach 元素可以(动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。)
collection :必填,值为要选代循环的属性名。这个属性值的情况有很多。
item:变量名,值为从法代对象中取出的每一个值。
index :索引的属性名,在集合数组情况下值为当前索引值,当选代循环的对象是Map类型时,这个值为Map 的key (键值)。
open:整个循环内容开头的字符串。
close :整个循环内容结尾的字符串。
separator :每次循环的分隔符
代码如下(示例):
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
四、bind 元素
bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>
五、include标签
include标签引用,可以复用SQL片段
sql标签中id属性对应include标签中的refid属性。
通过include标签将sql片段和原sql片段进行拼接成一个完整的sql语句进行执行。
代码示例:
<sql id="sqlid">
res_type_id,res_type
</sql>
<sql id="base_table">
bu_res_type,pub_res_type
</sql>
<select id="selectbyId" resultType="com.property.vo.PubResTypeVO">
select
<include refid="sqlid"/>
from
<include refid="base_table"/>
</select>
等同于:
<select>
select res_type_id,res_type
from pbu_res_type,pub_res_type
</select>