我们先来看一下,之前的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">
-
-
- <insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
-
- 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>
-
-
- <delete id="delete" parameterType="int">
- delete from t_user where id=#{id}
- </delete>
-
-
- <select id="selectUser" resultType="User">
- select * from t_user
- </select>
-
-
- <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>