例如 一個實體 user 校驗name名字不能重復
思路
1.新增:時比較容易做 直接根據傳來的參數 查詢實體如果不為空 則查詢到了重復值
2.修改:修改需要考慮較多
2.1.既然是不重復 必然是必填字段.前端校驗即可
2.2.前端傳來的參數name 需要和數據庫字段name比較. 數據庫查詢時需要根據id查詢,然后拿數據庫
查詢取到的name 和 用戶輸入的name 進行比價. 如果 相等 那么說明用戶輸入時沒有進行更改數據 校驗通過 ,
如果不相等說明用戶修改時,更改了name 值,那么需要查詢修改的值在數據庫中是否已經存在,查詢條件為
where name = ? 如果沒查詢到校驗通過
案例如下 使用的是 -- mybatisPlus
/** * 修改校驗 * @param inspectorOrderEntity * @return */ @Override public QmsInspectorOrderEntity selectOneUpdatePriority(QmsInspectorOrderEntity inspectorOrderEntity) { QmsInspectorOrderEntity entity = new QmsInspectorOrderEntity(); //用戶輸入 Integer orderNo = inspectorOrderEntity.getOrderNo(); QmsInspectorOrderEntity qmsInspectorOrderEntity = baseMapper.selectById(inspectorOrderEntity); //1.根據id 對比用戶輸入和數據庫查詢 順序號是否相等 if (orderNo.equals(qmsInspectorOrderEntity.getOrderNo())){ //不存在重復順序號 校驗通過 entity.setMarking(0); return entity; } else { // 用戶輸入和數據庫查詢不相等 需要做校驗 順序是否存在 if (this.ifExistNumber(inspectorOrderEntity)){ //true 沒有查詢到 校驗通過 entity.setMarking(0); return entity; }else { //建議輸入N+1 順序號已存在 QueryWrapper<QmsInspectorOrderEntity> wrapper1 = new QueryWrapper<>(); wrapper1.orderByDesc("order_no").last("limit 1"); QmsInspectorOrderEntity maxValue = baseMapper.selectOne(wrapper1); entity.setSuggestNumber(maxValue.getOrderNo()+1+""); entity.setOrderNo(qmsInspectorOrderEntity.getOrderNo()); entity.setMarking(1); return entity; } } } /** * 查詢 順序號是否存在? 存在false * @param inspectorOrderEntity 實體 * @return Boolean */ public boolean ifExistNumber(QmsInspectorOrderEntity inspectorOrderEntity){ Integer orderNo = inspectorOrderEntity.getOrderNo(); QueryWrapper<QmsInspectorOrderEntity> wrapper = new QueryWrapper<>(); wrapper.eq("order_no",orderNo); QmsInspectorOrderEntity entity = null; try { entity = baseMapper.selectOne(wrapper); } catch (Exception e) { e.printStackTrace(); } return !ObjectUtils.isNotEmpty(entity); }
