Mybatis高级用法
最近项目需要,研究了一下mybatis,在学习过程中记录下了其中的几个重要的用法,本文例子主要说了foreach、非空更新、插入数据时如何返回主键id, on duplicate key update的用法,其他的等有空再写吧。
1、Foreach1
2
3
4
5
6
7
8<delete id="deleteIfNotExist" parameterType="java.util.List">
DELETE FROM bd_article_tag_map
WHERE article_id=#{articleId}
AND article_tag_id NOT IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
2、非空更新1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<update id="updateByArticleId" parameterType="com.iss.blog.po.Article">
UPDATE ub_article
<set>
<if test="articleTitle!=null">
article_title =#{articleTitle},
</if>
<if test="articleSummary!=null">
article_summary=#{articleSummary},
</if>
<if test="articleClick!=-1">
article_click=#{articleClick},
</if>
</set>
WHERE article_id=#{articleId}
</update>
3、插入字段后返回自增主键的值1
2
3
4
5
6
7
8<insert id="insert" parameterType="com.iss.blog.po.Article" useGeneratedKeys="true" keyProperty="article.articleId">
INSERT INTO ub_article
(article_id,......
article_create_time,article_modify_time
)
VALUES (#{article.articleId},#{article.userId},......
#{article.articleCreateTime,jdbcType=TIMESTAMP}, #{article.articleModifyTime,jdbcType=TIMESTAMP})
</insert>
设置useGeneratedKeys=”true”并且制定主键keyProperty;这样在插入成功后就会调用keyProperty的setter方法回填主键。注意,必须加上@Param,否则会报错。
插入成功返回成功操作的条目数;失败返回 0
4、不存在插入,存在更新1
2
3
4
5
6
7
8
9
10
INSERT INTO car_brand (brand_id, initial,name ,create_time,update_time)
VALUES
<foreach collection="carTypes" separator="," item="item">
(#{item.id}, #{item.groupName},#{item.name},now(),NULL)
</foreach>
on duplicate key update
name=values(name),
initial=values(initial),
update_time=now()
注意关键字on duplicate key update ,其中name,initial必须有一个是唯一索引

