mapper中mysql复合语句_Mybatis各语句高级用法(未完待续)

更多的语法请参考官网

环境: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

大于等于

>=

小于等于

<=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值