mybatis+mysql批量插⼊和批量更新、存在及更新mybatis+mysql批量插⼊和批量更新
⼀、批量插⼊
批量插⼊数据使⽤的sql语句是:
insert into table (字段⼀,字段⼆,字段三) values(xx,xx,xx),(oo,oo,oo)
mybatis中l的代码如下:
<!-- 批量插⼊数据 -->
<insert id="insertBatch" parameterType="java.util.List"
useGeneratedKeys="true">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
hsycms</selectKey>
insert into wd_solr
(fayu_id, tablename,
name,logo,description,section_no,look_count,favorite_count,create_uid,create_time,update_time,timestamp) values
<foreach collection="list" item="wdSolr" index="index"
separator=",">
(
#{wdSolr.fayuId},#{wdSolr.tablename},#{wdSolr.name},#{wdSolr.logo},
#{wdSolr.description},#{wdSolr.sectionNo},#{wdSolr.lookCount},#{wdSolr.favoriteCount},
#{ateUid},#{ateTime},#{wdSolr.updateTime},#{wdSolr.timestamp}
)
</foreach>
</insert>
⼆、批量更新
批量更新数据使⽤的sql语句是:
UPDATE table
SET aa = CASE id
WHEN 1 THEN 'oo'
WHEN 2 THEN 'pp'
WHEN 3 THEN 'qq'
END
,SET bb = CASE id
WHEN 1 THEN 'xx'
WHEN 2 THEN 'yy'
WHEN 3 THEN 'zz'
END
WHERE id IN (1,2,3)
上⾯这⼀条mysql语句可以更新多条记录,mybatis中l的代码如下:
<!-- 批量更新数据 -->
<update id="updateBatch">
update wd_solr set
name =
<foreach collection="list" item="wdSolr" index="index"
separator=" " open="case id" close="end">
when #{wdSolr.id} then
#{wdSolr.name}
</foreach>
,logo =
谷歌indexof的用法<foreach collection="list" item="wdSolr" index="index"
separator=" " open="case id" close="end">
when #{wdSolr.id} then
#{wdSolr.logo}
</foreach>
,timestamp =
<foreach collection="list" item="wdSolr" index="index"
separator=" " open="case id" close="end">
when #{wdSolr.id} then #{wdSolr.timestamp}
高一三角函数所有公式</foreach>
where id in
<foreach collection="list" item="wdSolr" index="index"
separator="," open="(" close=")">
#{wdSolr.id}
</foreach>
</update>
三、SELECT LAST_INSERT_ID() 的使⽤和注意事项
总体解释:将插⼊数据的主键返回到 user 对象中。
具体解释:
SELECT LAST_INSERT_ID():得到刚 insert 进去记录的主键值,只适⽤与⾃增主键
keyProperty:将查询到主键值设置到 parameterType 指定的对象的那个属性
order:SELECT LAST_INSERT_ID() 执⾏顺序,相对于 insert 语句来说它的执⾏顺序
resultType:指定 SELECTLAST_INSERT_ID() 的结果类型
---------------------------------------------------------------------------------------
-----------------------------------------------------------------------
SQL如何实现存在即更新,没有就插⼊
SQL Server,今天遇到个问题就是SQL如何实现存在即更新,没有就插⼊。
我⽤mybatis写的:意思是就是判断类和位置同时存在才更新,只有⼀个或都不存在就插⼊。但是我写
的结果却是只要(类别和positionID)其中⼀个存在,就把数据库中的所有有关的给跟新了,请问各位⼤侠有什么好的解决办法吗?
如果存在(SELECT * FROM T_Mobilie_BackstageCommon其中类别=#{类别,jdbcType为VARCHAR}和positionId =#{positionId,jdbcType为整数})
帝国cms代码质量开始
更新T_Mobilie_BackstageCommon设定类别=#{类别,jdbcType为VARCHAR},pathStr =#{pathStr ,jdbcType为VARCHAR},jumpToUrl =#{jumpToUrl,jdbcType为VARCHAR},标题=#{标题,jdbcType为VARCHAR},备忘录=#{备忘录,jdbcType为VARCHAR},expansion_one =#{expansion_one,jdbcType为VARCHAR}, expansion_two =#{expansion_two,jdbcType = VARCHAR}
end
else
begin
插⼊到
T_Mobilie_BackstageCommon(category,pathStr,jumpToUrl,title,needToLogin,positionId,memo,expansion_one,expansion_two) 值(#{category,jdbcType = VARCHAR},#{pathStr,jdbcType = VARCHAR},#{jumpToUrl,jdbcType = VARCHAR} ,#
{title,jdbcType = VARCHAR},#{needToLogin,jdbcType = INTEGER},#{positionId,jdbcType = INTEGER},#{memo,jdbcType = VARCHAR},#{expansion_one,jdbcType = VARCHAR},#{expansion_two, jdbcType = VARCHAR})
结束
------------------------------------------------------------------------------
话不多多说,直接上代码,这是⾃⼰亲⼿查得,了好久也是,然后才写好,写⼀下记录着吧
-- 存在即更新,不存在就插⼊(根据ID)
insert into `vclb_mm_inventory` (`ID_`, `STOCK_ID_`, `ITEM_ID_`, `AMOUNT_`)
驱动器英文怎么说values ('489734716803514367', '仓库⼀', '⽔杯', 44)
mysql语句的执行顺序ON DUPLICATE KEY UPDATE `AMOUNT_` = `AMOUNT_` + 44;
-- 将物品名称与仓库名称修改为库存表中唯⼀索引
ALTER TABLE vclb_mm_inventory ADD unique(`STOCK_ID_` , `ITEM_ID_`);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论