更多的语法请参考官网
环境: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,否则会报错。
插入成功返回成功操作的条目数;失败返回 0
插入时间字段
三步:
类字段使用java.util.Date,数据库字段使用DATETIME,在插入的value值使用timestamp,比如#{article.articleCreateTime,jdbcType=TIMESTAMP}
不存在则插入
insert IGNORE into bd_article_tag_map (article_id,article_tag_id)
values (#{articleTagMap.articleId}, #{articleTagMap.articleTagId})
关键是设置数据库字段为unique,这里设置了联合2个字段unique;根据unique字段来判断是否插入,插入成功返回操作成功的条目数,失败返回 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
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}
下面的article_id字段在两个表中都存在,必须加上表前缀;这里表前缀需要写成表的别名,否则会报错找不到此字段。
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}
判断语句
判断是否为空
注意,不能写成NULL,否则报错org.apache.ibatis.binding.BindingException: Parameter 'NULL' not found
大于等于
>=
小于等于
<=