MyBatis学习(四)- 动态SQL

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

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5.     
  6. <mapper namespace="org.ygy.mapper.UserMapper">  
  7.   
  8.     <!-- 插入,参数是User对象,使用自动增长的ID -->  
  9.     <insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">  
  10.         <!-- 就是普通的插入语句,这里使用#{xxx}的方式赋值,这里的xxx要和实体类中的属性对应 -->  
  11.         insert into t_user(name , password , email , gender , age)  
  12.         values(#{name} , #{password} , #{email} , #{gender} , #{age})  
  13.     </insert>  
  14.       
  15.     <!-- 更新用户信息 -->  
  16.     <update id="update" parameterType="User">  
  17.         update t_user set  
  18.         name=#{name},password=#{password},email=#{email},gender=#{gender},age=#{age}  
  19.         where id=#{id}    
  20.     </update>  
  21.       
  22.     <!-- 根据用户ID,删除一个用户 -->  
  23.     <delete id="delete" parameterType="int">  
  24.         delete from t_user where id=#{id}  
  25.     </delete>  
  26.       
  27.     <!-- 查询所有用户 -->  
  28.     <select id="selectUser" resultType="User">  
  29.         select * from t_user  
  30.     </select>  
  31.       
  32.     <!-- 根据用户ID,查询用户 -->  
  33.     <select id="queryById" parameterType="int" resultType="User">  
  34.         select * from t_user where id=#{id}  
  35.     </select>  
  36.       
  37.     <!-- 根据用户名,查找用户 -->  
  38.     <select id="queryByName" parameterType="String" resultType="User">  
  39.         select *from t_user where name=#{name}  
  40.     </select>  
  41.       
  42. </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:

[html]  view plain copy
  1. <!-- 更新用户信息 -->  
  2.     <update id="update" parameterType="User">  
  3.         update t_user  
  4.         <set>  
  5.             <if test="name != null">name=#{name},</if>  
  6.             <if test="password != null">password=#{password}</if>  
  7.             <if test="email != null">email=#{email}</if>  
  8.             <if test="age != null">age=#{age}</if>  
  9.             <if test="gender != null">gender=#{gender}</if>   
  10.         </set>  
  11.         where id=#{id}  
  12.     </update>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值