近來在改造一個同事的數據入庫項目,發現了一些問題,其中就因為數據庫聯合主鍵的緣故導入新增的數據不能入庫(這個新增的入庫數據,其實對應的數據表就存在這樣的數據,她那邊沒有針對此進行判斷有則更新,僅僅是無則插入)。
基於這個問題,我不想寫太多的代碼(查這條數據是否存在,存在則更新這樣的),只想用最少的代碼量解決這個問題,通過搜索我找到了這樣的方法,無需寫很多代碼,就是一條SQL就能搞定。
1.針對單條插入或更新而言,SQL可以這樣寫(對應的XML里面的SQL)
以我博客為例:
INSERT INTO `wp_users` ( `ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status` `display_name` ) VALUES ( #{ID}, #{user_login}, #{user_pass}, #{user_nicename}, #{user_email}, #{user_url}, #{user_registered}, #{user_activation_key}, #{user_status}, #{display_name} ) ON DUPLICATE KEY UPDATE ID = VALUES(ID), user_login = VALUES(user_login), user_pass = VALUES(user_pass), user_nicename = VALUES (user_nicename), user_email = VALUES (user_email), user_url = VALUES (user_url), user_registered = VALUES (user_registered), user_activation_key = VALUES (user_activation_key), user_status = VALUES (user_status), display_name = VALUES (display_name)
2.針對批量插入或更新而言可以這么寫(對應的XML里面的SQL)
以我博客為例:
INSERT INTO `wp_users` ( `ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status` `display_name` ) VALUES <foreach collection="list" item="item" index="index" separator=","> ( #{item.ID}, #{item.user_login}, #{item.user_pass}, #{item.user_nicename}, #{item.user_email}, #{item.user_url}, #{item.user_registered}, #{item.user_activation_key}, #{item.user_status}, #{item.display_name} ) </foreach> ON DUPLICATE KEY UPDATE ID = VALUES(ID), user_login = VALUES(user_login), user_pass = VALUES(user_pass), user_nicename = VALUES (user_nicename), user_email = VALUES (user_email), user_url = VALUES (user_url), user_registered = VALUES (user_registered), user_activation_key = VALUES (user_activation_key), user_status = VALUES (user_status), display_name = VALUES (display_name)
參考資料如下:
mybatis對mysql進行插入或者更新(含批量)