MyBatis学习(四)- 动态SQL

我们先来看一下,之前的UserMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="org.ygy.mapper.UserMapper">

	<!-- 插入,参数是User对象,使用自动增长的ID -->
	<insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
		<!-- 就是普通的插入语句,这里使用#{xxx}的方式赋值,这里的xxx要和实体类中的属性对应 -->
		insert into t_user(name , password , email , gender , age)
		values(#{name} , #{password} , #{email} , #{gender} , #{age})
	</insert>
	
	<!-- 更新用户信息 -->
	<update id="update" parameterType="User">
		update t_user set
		name=#{name},password=#{password},email=#{email},gender=#{gender},age=#{age}
		where id=#{id}	
	</update>
	
	<!-- 根据用户ID,删除一个用户 -->
	<delete id="delete" parameterType="int">
		delete from t_user where id=#{id}
	</delete>
	
	<!-- 查询所有用户 -->
	<select id="selectUser" resultType="User">
		select * from t_user
	</select>
	
	<!-- 根据用户ID,查询用户 -->
	<select id="queryById" parameterType="int" resultType="User">
		select * from t_user where id=#{id}
	</select>
	
	<!-- 根据用户名,查找用户 -->
	<select id="queryByName" parameterType="String" resultType="User">
		select *from t_user where name=#{name}
	</select>
	
</mapper>

主要看一下,插入,和更新,可能会发现一些问题,例如:在插入的时候用户信息可能并不全,在更新的时候,我们并不像更新所有的信息。

其实,如果用查询来说明的话,会更好理解。

那该怎么办呢?

MyBatis提供了很方便的做法:

        MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态 SQL 可以彻底处理这种痛苦。

        通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意映射的 SQL 语句中。

        动态 SQL 元素和使用 JSTL 或其他相似的基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就能工作了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
我们来修改一下update:

<!-- 更新用户信息 -->
	<update id="update" parameterType="User">
		update t_user
		<set>
			<if test="name != null">name=#{name},</if>
			<if test="password != null">password=#{password}</if>
			<if test="email != null">email=#{email}</if>
			<if test="age != null">age=#{age}</if>
			<if test="gender != null">gender=#{gender}</if> 
		</set>
		where id=#{id}
	</update>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值