使用 MyBatis-Plus 进行删除操作演示
问题描述
根据 分组id
删除关联的所有基础属性
Controller 层
@PostMapping("/attr/relation/delete")
// @RequestBody 是将前端传递来的 json 数据封装成 vo 对象
public R deleteRelation(@RequestBody AttrGroupRelationVo[] vos) {
attrService.deleteRelation(vos);
return R.ok();
}
Service 层
@Override
public void deleteRelation(AttrGroupRelationVo[] vos) {
List<AttrAttrgroupRelationEntity> entities = Arrays.stream(vos).map((item) -> {
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
BeanUtils.copyProperties(item, relationEntity);
return relationEntity;
}).collect(Collectors.toList());
// 这个 deleteBatchRelation() 就是要在 MyBatis-Plus 中自定义的方法
relationDao.deleteBatchRelation(entities);
}
在 MyBatis-Plus 的 ···Dao.java 中定义方法
@Mapper
public interface AttrAttrgroupRelationDao extends BaseMapper<AttrAttrgroupRelationEntity> {
// @Param("entities") 是将传递过来的参数 entities 定义一个名字,方便后面编写SQL语句使用
void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
}
在 MyBatis-Plus 的 ···Dao.xml 中定义SQL语句
<mapper namespace="com.ran.mall.product.dao.AttrAttrgroupRelationDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.my.project.product.entity.AttrAttrgroupRelationEntity" id="attrAttrgroupRelationMap">
<result property="id" column="id"/>
<result property="attrId" column="attr_id"/>
<result property="attrGroupId" column="attr_group_id"/>
<result property="attrSort" column="attr_sort"/>
</resultMap>
<!-- 这里是自己定义的SQL语句 id里对应的是上面java里定义的语句 -->
<delete id="deleteBatchRelation">
DELETE FROM `pms_attr_attrgroup_relation`
WHERE
<!-- entities 是方法传递过来的参数,对其进行 foreach 循环,每个对象命名为 item,分隔符为 ` OR ` -->
<foreach collection="entities" item="item" separator=" OR ">
<!-- #{item.attrId}:这种是将每个 item 中的属性取出 -->
(`attr_id` =#{item.attrId} AND `attr_group_id` =#{item.attrGroupId})
</foreach>
</delete>
</mapper>