点击上方 Java老铁,并选择 设为星标
优质文章和资料会及时送达
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
(1)接口中的方法
public List<Emp> getEmps(Emp emp);
public void updateEmp(Emp emp);
public List<Emp> getEmpsByIds(@Param("ids") List<Integer> ids);
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 有一个when标签成立 ,其余的when标签中的内容不再执行。
<select id="getEmps" resultMap="emp">
SELECT *FROM emp
<where>
<choose>
<when test="id != null">
id = #{id}
</when>
<when test="lastName != null">
and last_name = #{lastName}
</when>
<when test="geder != null">
and gender = #{geder}
</when>
<otherwise>
id=1
</otherwise>
</choose>
</where>
</select>
set标签
<update id="updateEmp">
UPDATE emp
<set>
<if test="lastName != null">
last_name=#{lastName},
</if>
<if test="geder != null">
gender = #{geder}
</if>
</set>
WHERE id=#{id}
</update>
foreach标签
<!-- SELECT *FROM emp
WHERE id IN (1,5,6) -->
<select id="getEmpsByIds" resultMap="emp">
SELECT *FROM emp
WHERE id IN
<foreach collection="ids" item="item_id" separator=","
open="(" close=")">
#{item_id}
</foreach>
</select>
foreach标签 批量插入
<insert id="addEmps">
INSERT INTO emp(last_name,gender,email)
VALUES
<foreach collection="emp" item="emps" separator=",">
(#{emps.lastName},#{emps.geder},#{emps.email})
</foreach>
</insert>
关注我
获取更多
Java干货
原创文章
视频资料
技术交流群