一、返回值
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/zh-hant/n/147905.html