一、返回值
public int deleteByPrimaryKey(Object key);
deleteByPrimarykey是Mapper接口中用于通过主键删除记录的方法,其返回值是一个int类型的值。
如果删除成功,则返回受影响的记录数,如果删除失败,则返回0。
下面是示例代码:
int result = mapper.deleteByPrimaryKey(1);
if(result > 0){
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
二、删除逻辑
deleteByPrimarykey方法通过传入的主键值来删除对应的记录。在进行删除操作时,程序会先去找到对应的记录,然后将该记录删除,最后将结果返回给调用者。
下面是示例代码:
public void deleteStudentById(int id) {
StudentExample example = new StudentExample();
example.createCriteria().andIdEqualTo(id);
studentMapper.deleteByExample(example);
}
以上代码是一个删除学生信息的方法,其中id是要删除的主键值。程序使用了Mybatis的Example来构造删除条件。
三、删除限制
1.级联删除
在进行删除操作时,有时候需要删除的记录会被其他记录所引用,这样的情况下就不能直接删除,需要进行级联删除。级联删除是指同时删除与该记录相关的其他记录。
下面是一个使用Mybatis Plus进行级联删除的示例代码:
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
@Autowired
private UserGroupRelationMapper userGroupRelationMapper;
@Override
public boolean removeUserById(Long id) {
// 查询用户是否与其他记录有关联
UserGroupRelation userGroupRelation = userGroupRelationMapper.selectOne(new LambdaQueryWrapper()
.eq(UserGroupRelation::getUserId,id));
if (userGroupRelation == null) { // 不存在关联记录
return this.removeById(id);
} else {
// 级联删除相关的记录
userGroupRelationMapper.deleteById(userGroupRelation.getId());
return this.removeById(id);
}
}
}
2.逻辑删除
逻辑删除是一种删除方式,它并不是将记录真正的删除,而是在记录中加入一个标记位,用于表示该记录已经被删除。在进行查询操作时,程序会过滤掉被标记为已删除的记录。
下面是一个通过Mybatis Plus进行逻辑删除示例代码:
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
@Override
public boolean deleteUserById(Long id) {
User user = new User();
user.setId(id);
user.setDeleted(1);
return this.updateById(user);
}
}
四、删除操作安全问题
在进行数据库操作时,删除操作是一个比较危险的操作,如果操作不慎,很容易导致数据的丢失等问题。因此,在进行删除操作时,需要特别注意以下几点:
1.备份数据
在进行删除操作之前,需要定期备份数据。一旦发生了误删等问题,可以通过备份数据来进行恢复操作。
2.权限控制
在进行删除操作时,需要做好权限控制,只有具有删除权限的用户才能进行删除操作,以此避免非法删除。
3.二次确认
在进行删除操作时,应该先进行二次确认,以免误删。可以在进行删除操作之前弹出提示框,提示用户是否确认进行删除操作,以此避免误删等问题。
4.日志记录
在进行删除操作之后,需要及时记录日志,包括操作时间、操作人员等信息,以备日后查找和分析。
下面是一个记录删除操作的示例代码:
@Aspect
@Component
public class LogAspect {
@Resource
private LogMapper logMapper;
@Pointcut("execution(public * com.example.demo.controller.*.*(Integer))")
public void pointcut() {}
@Around("pointcut()")
public Object around(ProceedingJoinPoint pjp) {
try {
// 获取被删除的主键值
Integer id = (Integer) Arrays.asList(pjp.getArgs()).get(0);
Object result = pjp.proceed();
// 记录操作日志
Log log = new Log();
log.setOperateTime(new Date());
log.setOperateType("delete");
log.setOperateContent("删除记录,主键值为:" + id);
logMapper.insert(log);
return result;
} catch (Throwable throwable) {
throw new RuntimeException(throwable);
}
}
}
五、结语
deleteByPrimarykey是Mapper中非常常用的方法之一,在进行删除操作时需要特别注意删除操作的安全问题,并且合理使用级联删除和逻辑删除等操作,以此避免数据的丢失,保证数据的完整性。
原创文章,作者:GJHJ,如若转载,请注明出处:https://www.506064.com/n/147905.html