Mybatis 学习之Mapper动态语句

四、Mybatis 学习

4、Mapper动态语句

4.1 if 语句

映射文件

<select id="query1" resultType="User" parameterType="User"  resultMap="baseUser">
	select * from user  
	where 1= 1
	<if test="name !=null">and username = #{name}</if>
</select>

dao接口

List<User> query1(User user);
4.2 choose, when, otherwise

有时我们不想应用到所有的条件语句,而只想从中择其一项。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句

<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>
4.3 where语句
<select id="queryUser" resultMap="baseMap"
 	 resultType="com.sxt.bean.User" parameterType="user"> 
	select id ,name ,age  from t_user 
	<where>
		<if test="username!=null">
		     and name = #{username}
		</if>  
	</where>
</select> 
4.4 set语句

set主要也是用来解决更新问题的。

<update id="updateBookById">
	update t_book
		<set>
		<if test="author!=null"> author=#{author},</if>
		<if test="name!=null"> b_name=#{name},</if>
		<if test="price!=null"> price=#{price},</if>
		</set>
	where id=#{id};
</update>
4.5 trim

trim标记是一个格式化的标记,可以完成set或者是where标记的功能

属性说明
prefix前缀
prefixOverrides去掉第一个指定内容
suffix后缀
suffixoverride去掉最后一个指定内容

替代<where>的用法

<select id="queryUser" resultMap="baseMap" resultType="com.tcwong.bean.User"
	parameterType="user">
	select id ,name ,age from t_user
	<!-- <where>
		<if test="username!=null">
			and name = #{username}
		</if>
	</where> -->
	<trim prefix="where" prefixOverrides="AND |OR ">
		<if test="username!=null">
			 and name = #{username}
		</if>
		<if test="age != 0">
			and age = #{age}
		</if>
	</trim>
</select>

替代<set>的用法

<update id="updateUser" parameterType="User">
update t_user
<trim prefix="set" suffixOverrides=",">
	<if test="username!=null">
		name = #{username},
	</if>
	<if test="age != 0">
		age = #{age}
	</if>
</trim>
where id=#{id}
</update>

或者

<update id="updateUser" parameterType="User">
update t_user
set 
<trim  suffixOverrides=",">
	<if test="username!=null">
		name = #{username},
	</if>
	<if test="age != 0">
		age = #{age}
	</if>
</trim>
where id=#{id}
</update>
4.6 foreach语句

foreach用来遍历,遍历的对象可以是数组,也可以是集合。

属性说明
collectioncollection属性的值有三个分别是list、array、map三种
open前缀
close后缀
separator分隔符,表示迭代时每个元素之间以什么分隔
item表示在迭代过程中每一个元素的别名
index用一个变量名表示当前循环的索引位置
public interface UserMapper {
// 如果不指定[@Param](https://my.oschina.net/u/2303379) 默认是array
public List<User> queryUserByIds(@Param("ids")List<Integer> ids);

public int insertUser(@Param("users")List<User> users);
}

映射文件

<select id="queryUserByIds" resultType="user">
select * from t_user where id in 
<foreach collection="ids" open="(" close=")" separator="," item="id" >
	#{id}
</foreach>
</select>

<insert id="insertUser">
insert into t_user(name,age)values
<foreach collection="users" item="user" separator=",">
	(#{user.name},#{user.age})
</foreach>
</insert>
4.7 bind

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。

<select id="getUserById" resultMap="baseMap" resultType="com.tcwong.bean.User">
<!-- 声明了一个参数aaa 在后面就可以使用了 -->
<bind name="aaa" value="12"/>
select
id ,name ,age from t_user where id=${aaa}
</select>
4.8 sql块

sql片段一般用来定义sql中的列

映射文件

<sql id="baseSql">
	id,name,password,address
</sql>

<select id="queryAll" resultType="User">
	select 
	<include refid="baseSql"></include>
	from user
</select>

转载于:https://my.oschina.net/tcwong/blog/3043672

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值