MyBatis之动态SQL

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

(1)接口中的方法

1   public List<Emp> getEmps(Emp emp);
2     
3     public void updateEmp(Emp emp);
4     
5     public List<Emp> getEmpsByIds(@Param("ids") List<Integer> ids);
6     
7     public void addEmps(@Param("emp") List<Emp> emp);

(2)Mapper文件

if标签 + where标签

<resultMap type="com.eu.bean.Emp" id="emp">
          <id column="id" property="id"/>
          <result column="last_name" property="lastName"/>
          <result column="gender" property="geder"/>
          <result column="email" property="email"/>
      </resultMap>
  
    <select id="getEmps" resultMap="emp">
        SELECT *FROM emp
        <where>
            <if test="id != null">
                id = #{id}
            </if>
            <if test="lastName != null">
                and last_name = #{lastName}
            </if>
            <if test="geder != null">
                 and gender = #{geder}
            </if>
        </where>
    </select> 

choose,when 有一个whe标签成立 ,其余的when标签中的内容不再执行

 1   <select id="getEmps" resultMap="emp">
 2         SELECT *FROM emp
 3         <where>
 4             <choose>
 5                 <when test="id != null">
 6                     id = #{id}
 7                 </when>
 8                 <when test="lastName != null">
 9                     and last_name = #{lastName}
10                 </when>
11                 <when test="geder != null">
12                     and gender = #{geder}
13                 </when>
14                 <otherwise>
15                     id=1
16                 </otherwise>
17             </choose>
18         </where>
19     </select>

set标签

 1   <update id="updateEmp">
 2         UPDATE emp
 3         <set>
 4             <if test="lastName != null">
 5                 last_name=#{lastName},
 6             </if>
 7             <if test="geder != null">
 8                 gender = #{geder}
 9             </if>
10         </set> 
11         WHERE id=#{id}
12     </update>

 foreach标签

 1   <!-- SELECT *FROM emp
 2          WHERE id IN (1,5,6) -->
 3       <select id="getEmpsByIds" resultMap="emp">
 4               SELECT *FROM emp
 5               WHERE id IN 
 6               <foreach collection="ids" item="item_id" separator="," 
 7                   open="(" close=")">
 8                    #{item_id}
 9               </foreach>
10       </select>

 foreach标签 批量插入

1 <insert id="addEmps">
2               INSERT INTO emp(last_name,gender,email)
3             VALUES
4             <foreach collection="emp" item="emps" separator=",">
5                 (#{emps.lastName},#{emps.geder},#{emps.email})
6             </foreach>
7       </insert>

 

posted @ 2019-04-22 18:14  司徒二条  阅读(183)  评论(0编辑  收藏  举报