环境:MySQL5.6,jdk1.8
建议:所有的参数加上@Param
resultMap的意义:将查询中得到的结果通过属性的setter方法注入属性里。如果未定义resultMap,则虽然数据库查询成功了但会返回null
insert
插入自增主键
如果设置了自增主键,那插入时,主键字段的值必须为0,否则不会自增;
插入字段后返回自增主键的值
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})
设置useGeneratedKeys="true"
并且制定主键keyProperty
;这样在插入成功后就会调用keyProperty
的setter方法回填主键。注意,必须加上@Param
,否则会报错。
插入成功返回 1;失败返回 0
插入时间字段
三步:
类字段使用java.util.Date
,数据库字段使用DATETIME
,在插入的value值使用timestamp,比如#{article.articleCreateTime,jdbcType=TIMESTAMP}
MySQL5.7版本在时间字段上处理不好,如果有问题可以参考 mysql 5.7之后版本datetime默认值设置'0000-00-00'
不存在则插入
insert IGNORE into bd_article_tag_map (article_id,article_tag_id)
values (#{articleTagMap.articleId}, #{articleTagMap.articleTagId})
关键是设置数据库字段为unique,这里设置了联合2个字段unique;根据unique字段来判断是否插入,插入成功返回 1,失败返回 0;
update
如果字段非空,则更新
UPDATE ub_article
article_title =#{articleTitle},
article_summary=#{articleSummary},
article_click=#{articleClick},
WHERE article_id=#{articleId}
注意:字段后面的逗号,不可省略
delete
foreach的用法
接口方法
public int deleteIfNotExist(@Param("articleId")int articleId,@Param("list") List tagIdList);
xml
DELETE FROM bd_article_tag_map
WHERE article_id=#{articleId}
AND article_tag_id NOT IN
#{item}
select
left join 联合查询
join的意义:把两个表的属性加起来
left join 的意义:左表的属性会全部显示,右表的属性缺少则填null
下面的article_id字段在两个表中都存在,必须加上表前缀;这里表前缀需要写成表的别名,否则会报错找不到此字段。