在 MyBatis 中,deleteByPrimaryKey
和 deleteByIds
是两个常用的 SQL Mapper 方法,它们都用于删除数据库表中的数据行,但具体使用方式有所不同。
deleteByPrimaryKey 是 MyBatis Mapper 中提供的默认删除方法,它根据主键字段的值来删除一行数据。在使用 deleteByPrimaryKey 方法时,需要在对应的 Mapper XML 文件中指定主键字段的名称,并传入该主键字段的值。当 MyBatis 执行这个方法时,它会生成一条类似于 DELETE FROM table_name WHERE id = ?
的 SQL 语句,其中 id 为主键字段的名称。
示例:
// Mapper Interface
int deleteByPrimaryKey(Long id);
// Mapper XML
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
DELETE FROM my_table WHERE id = #{id}
</delete>
deleteByIds 方法是 MyBatis 3.3.0 之后新增的一种批量删除方法,它可以同时删除多行数据。在使用 deleteByIds 方法时,需要将多个主键字段的值打包成一个数组或者集合,并将其作为方法的参数传递给 Mapper 接口。在对应的 Mapper XML 文件中,需要使用 foreach 元素来遍历参数中的主键值,并生成多条类似于 DELETE FROM table_name WHERE id = ?
的 SQL 语句。
示例:
// Mapper Interface
int deleteByIds(List<Long> ids);
// Mapper XML
<delete id="deleteByIds" parameterType="java.util.List">
DELETE FROM my_table WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
总的来说,在 MyBatis 中,deleteByPrimaryKey
适合删除单行数据,而 deleteByIds
适合删除多行数据。但需要注意的是,只有在数据库中定义了主键或唯一键约束时,才能使用 deleteByPrimaryKey
方法。