Mybatis 插入和删除批处理操作
在操作数据库时,经常会碰到批量插入、批量删除的情况,直接执行SQL语句还好做一点,当使用Mybatis进行批量插入、批量删除时会有一些问题。下面对使用Mybatis批量插入,批量删除进行介绍。
1.批量插入
Java代码:
//Model:Test.java
@Data
publicclassTest{
privateStringx;
privateStringy;
privateStringz;
}
//Mapper:TestMapper.java
publicvoidinsertTestList(List<Test>testList);
XML代码
<!--XML:TestMapper.XML-->
...
<!--忽略重复数据-->
<insertid="insertTestList"parameterType="Test">
INSERTIGNOREINTO
test_table(test_x,test_y,test_z)
VALUES
<foreachitem="item"index="index"collection="list"open="("close=")"separator=",">
#{item}.x,#{item.y},#{item}.z
</foreach>
</insert>
<!--更新重复数据-->
<insertid="insertTestList"parameterType="Test">
INSERTINTO
test_table(test_x,test_y,test_z)
VALUES
<foreachitem="item"index="index"collection="list"open="("close=")"separator=",">
#{item}.x,#{item.y},#{item}.z
</foreach>
ONDUPLICATEKEYUPDATE
test_x=VALUES(test_x),
test_y=VALUES(test_y),
test_z=VALUES(test_z)
</insert>
...
批量插入SQL语句
insertintotest_table(x,y,z)values(1,1,1),(2,2,2),(3,3,3)
备注:VALUE()是Mysql的一个函数,具体解释可以查看文档function_values。
主要功能就是在数据重复时可以获取要更新的值。
2.批量删除
Java代码:
//Model:Test.java
@Data
publicclassTest{
privateStringx;
privateStringy;
privateStringz;
}
//Mapper:TestMapper.java
publicvoiddeleteTestList(List<Test>testList);
XML代码
<!--XML:TestMapper.XML-->
...
<deleteid="deleteTestList"parameterType="Test">
DELETEFROM
test_table
WHERE
<foreachitem="item"index="index"collection="list"open="("close=")"separator="OR">
test_x=#{item.x}ANDtest_y=#{item.y}ANDtest_z=#{item.z}
</foreach>
</delete>
...
SQL语句
deletefromtest_tablewhere(test_x=1ANDtest_y=1ANDtest_z=1)or(test_x=2ANDtest_y=2ANDtest_z=2)or(test_x=3ANDtest_y=3ANDtest_z=3)
备注:上面的代码为x,y,z为联合主键的情况,普通情况使用whereidin。
以上所述是小编给大家介绍的Mybatis插入和删除批处理操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!