业务需求:一次更新/删除多条数据,通常有两种方式:
(1)在业务代码中循环遍历,逐条删除,业务清晰;
(2)在sql语句中,循环删除,只操作一次数据库,这个分为两种方式:
方式A:通过循环一个id列表,循环删除数据;
方式B:条件为多个字段,为了更新多条记录为多个字段的不同值;
补充:这里的删除采用软删除,使用一个字段进行标记,所以,所有的删除实际就是更新。
正文:
(1)业务中循环删除
Mapper
<deleteid="deleteSingleProject"parameterType="java.lang.String">
updatet_single_project_scoresetis_delete=1,update_time=now(),operator=#{operator,jdbcType=VARCHAR}
wherestudent_id=#{studentId,jdbcType=VARCHAR}
andschool_year=#{schoolYear,jdbcType=VARCHAR}
andis_delete=0
</delete>
service业务方法
deleteSPByList接口
/**
* 批量删除-在业务层实现批量删除-徐玲博-2017-12-11 16:25:19
* @param singleProjectScoreEntityList 单项目成绩list
* @param operator 操作人
* @return 受影响行
*/
int deleteSPByList(List<SingleProjectScoreEntity> singleProjectScoreEntityList, String operator);
deleteSPByList实现
/**
*批量删除-在业务层实现批量删除-徐玲博-2017-12-11 16:25:19
*
*@paramsingleProjectScoreEntityList单项目成绩list
*@paramoperator操作人
*@return受影响行
*/
@Override
Public int deleteSPByList(List<SingleProjectScoreEntity>singleProjectScoreEntityList,Stringoperator){
intresult=0;
for(SingleProjectScoreEntitysingleProjectScoreEntity:singleProjectScoreEntityList){
StringstudentId=singleProjectScoreEntity.getStudentId();
StringschoolYear=singleProjectScoreEntity.getSchoolYear();
result=deleteSingleProject(studentId,schoolYear,operator);
result+=result;//删除数据的条数
}
returnresult;
}
调用的deleteSingleProject方法
/**
* 根据学生id及学年删除项目成绩-徐玲博-2017-12-11 16:35:52
*
* @param studentId 学生id
* @param schoolYear 学年
* @param operator 操作人
* @return 受影响行
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int deleteSingleProject(String studentId, String schoolYear, String operator) {
return singleP