环境:MySQL5.6,jdk1.8java
建议:全部的参数加上@Param
mysql
resultMap的意义:将查询中获得的结果经过属性的setter方法注入属性里。若是未定义resultMap,则虽然数据库查询成功了但会返回nullsql
若是设置了自增主键,那插入时,主键字段的值必须为0,不然不会自增;数据库
<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
,不然会报错。
插入成功返回 1;失败返回 0code
三步:
类字段使用java.util.Date
,数据库字段使用DATETIME
,在插入的value值使用timestamp,好比#{article.articleCreateTime,jdbcType=TIMESTAMP}
xml
MySQL5.7版本在时间字段上处理很差,若是有问题能够参考 mysql 5.7以后版本datetime默认值设置'0000-00-00'blog
insert IGNORE into bd_article_tag_map (article_id,article_tag_id) values (#{articleTagMap.articleId}, #{articleTagMap.articleTagId})
关键是设置数据库字段为unique,这里设置了联合2个字段unique;根据unique字段来判断是否插入,插入成功返回 1,失败返回 0;接口
<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>
注意:字段后面的逗号,不可省略it
接口方法io
public int deleteIfNotExist(@Param("articleId")int articleId,@Param("list") List<Integer> tagIdList);
xml
<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>
join的意义:把两个表的属性加起来
left join 的意义:左表的属性会所有显示,右表的属性缺乏则填null
<select id="selectByArticleId" resultMap="TagResultMap" parameterType="int"> SELECT * FROM bd_article_tag t1 LEFT JOIN bd_article_tag_map t2 ON t1.article_tag_id = t2.article_tag_id WHERE t2.article_Id = #{articleId} </select>
下面的article_id字段在两个表中都存在,必须加上表前缀;这里表前缀须要写成表的别名,不然会报错找不到此字段。
<select id="selectArticleListByArticleTagId" resultMap="ArticleResultMap" parameterType="int"> SELECT t1.article_id,user_id,article_archive_id, article_title, article_summary,article_click,article_status, article_type,article_publish,article_original, article_create_time,article_modify_time FROM ub_article t1 LEFT JOIN bd_article_tag_map t2 ON t1.article_id = t2.article_id WHERE t2.article_tag_id = #{articleTagId} </select>