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>