在操作數據庫時,經常會碰到批量插入、批量刪除的情況,直接執行SQL語句還好做一點,當使用Mybatis進行批量插入、批量刪除時會有一些問題。下面對使用Mybatis批量插入,批量刪除進行介紹。
1. 批量插入
Java代碼:
// Model: Test.java@Datapublic class Test {private String x;private String y;private String z;}// Mapper: TestMapper.javapublic void insertTestList(List<Test> testList);XML代碼
<!-- XML: TestMapper.XML -->...<!-- 忽略重複數據--><insert id="insertTestList" parameterType="Test">INSERT IGNORE INTO test_table(test_x, test_y, test_z)VALUES<foreach item="item" index="index" collection="list" open="(" close=")" separator=",">#{item}.x, #{item.y}, #{item}.z</foreach></insert><!-- 更新重複數據--><insert id="insertTestList" parameterType="Test">INSERT INTO test_table(test_x, test_y, test_z)VALUES<foreach item="item" index="index" collection="list" open="(" close=")" separator=",">#{item}.x, #{item.y}, #{item}.z</foreach>ON DUPLICATE KEY UPDATEtest_x = VALUES(test_x),test_y = VALUES(test_y),test_z = VALUES(test_z)</insert>...批量插入SQL語句
insert into test_table(x, y, z) values (1, 1, 1), (2, 2, 2), (3, 3, 3)
備註:VALUE()是Mysql的一個函數,具體解釋可以查看文檔function_values。
主要功能就是在數據重複時可以獲取要更新的值。
2. 批量刪除
Java代碼:
// Model: Test.java@Datapublic class Test {private String x;private String y;private String z;}// Mapper: TestMapper.javapublic void deleteTestList(List<Test> testList);XML代碼
<!-- XML: TestMapper.XML -->...<delete id="deleteTestList" parameterType="Test">DELETE FROM test_tableWHERE<foreach item="item" index="index" collection="list" open="(" close=")" separator="OR">test_x = #{item.x} AND test_y = #{item.y} AND test_z = #{item.z}</foreach></delete>...SQL語句
delete from test_table where (test_x = 1 AND test_y = 1 AND test_z = 1) or (test_x = 2 AND test_y = 2 AND test_z = 2) or (test_x = 3 AND test_y = 3 AND test_z = 3)
備註:上面的代碼為x,y,z為聯合主鍵的情況,普通情況使用where id in。
以上所述是小編給大家介紹的Mybatis 插入和刪除批處理操作,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!