mybatis动态SQL

1.where
1.如果中有类容则生成where子句,如果没有类容则什么也不做。
2.如果子句中有and则删除第一个and。

<select id="selAll" resultType="Loge">
		select *from loge
		<where>
			<if test="accin != null and accin != ''">
				and accin=#{accin}
			</if>
			<if test="accout != null and accout != ''">
				and accout=#{accout}
			</if>
		</where>
	</select>

2.choose、when、otherwise
choose中的条件只会有一个被执行,剩余的都不会执行
这三者最好同时使用

<select id="selAll" resultType="Loge">
		select *from loge
		<where>
			<choose>
				<when test="accin != null and accin != ''">
					and accin=#{accin}
				</when>
				<when test="accout != null and accout != ''">
					and accout=#{accout}
				</when>
				<otherwise>
				    and featured = 1
				</otherwise>
			</choose>
		</where>
	</select>

3.set
作用:去掉最后一个逗号,一般用于更新语句中
如果set里面有类容则生成set关键字,没有则不生成

<update id="upd" parameterType="log">
		update loge
		<set>
			id=#{id}------//防止SQL语法错误,set里面没有类容时会不生成set关键字
			<if test="accin != null and accin != ''">
				accin=#{accin},
			</if>
			<if test="accout != null and accout != ''">
				accout=#{accout},
			</if>
		</set>
	</update>

4.trim
prefix表示前面添加元素,prefixOverrides表示前面删除一个元素
suffix在后面添加元素,suffixOverrides在后面删除一个元素

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ...
</trim>

5.bind
bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文
一般用与模糊查询

<select id="selectBlogsLike" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

5.foreach
动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。

<select id="selectPostIn" resultType="domain.blog.Post" parameterType="list">
  SELECT *
  FROM POST P
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>

6.动态引入SQL
一般用于多表联合查询

<select id="">
	select
	<include refid="mysql"></include>
	from loge
</select>
<sql id="mysql">
	id,name,sex
</sql>

你可能感兴趣的:(mybatis)