本篇文章給大家分享的是有關(guān)springboot中如何使用mybatis-plus表單更新null值,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為甘州等服務(wù)建站,甘州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為甘州企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
使用mybatis-plus進(jìn)行數(shù)據(jù)庫交互,默認(rèn)開啟null不更新設(shè)置,在新增數(shù)據(jù)后,編輯頁面將字段值清除后(date類型,int類型,為避免默認(rèn)值傳入,model全部使用包裝類型初始化為null)無法將null值更新至數(shù)據(jù)庫
通過UpdateWrapper的set方法強制字段為null值
定義基礎(chǔ)類BaseModel,增加屬性updateFieldList,model繼承此類
public class BaseModel {@TableField(exist = false)@JSONField(serialize = false)private List<String> updateFieldList;public List<String> getUpdateFieldList() {return updateFieldList; }public void setUpdateFieldList(List<String> updateFieldList) {this.updateFieldList = updateFieldList; } }
自定自定義注解UpdateRequestBody替代RequestBody
@ResponseBody@PostMapping("/update") public Object update(@UpdateRequestBody AccountDO entity) { Result result = null; try { accountService.update(entity); result = Result.okResult(); } catch (Exception e) { result = Result.errorResult(); } return result; } @ResponseBody@PostMapping("/batchUpdate") public Object batchUpdate(@UpdateRequestBody List<AccountDO> entityList) { Result result = null; try { accountService.batchUpdate(entityList); result = Result.okResult(); } catch (Exception e) { result = Result.errorResult(); } return result; }
自定義HandlerMethodArgumentResolver對前臺json至后臺Model轉(zhuǎn)換的攔截,需要對List類型的Model集合進(jìn)行支持,獲取前臺提交json對應(yīng)定義Model中有同名屬性的,進(jìn)行加入打待更新字段列表updateFieldList
public class BaseModelMethodArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {if (methodParameter.hasParameterAnnotation(UpdateRequestBody.class)) {//集合if(List.class.isAssignableFrom(methodParameter.getParameterType())){ ParameterizedType parameterizedType = (ParameterizedType) methodParameter.getGenericParameterType(); Class clazz = (Class)parameterizedType.getActualTypeArguments()[0];//取出List中的真實對象類型if(BaseModel.class.isAssignableFrom(clazz)){return true; }else{return false; } }else{//單個對象if(BaseModel.class.isAssignableFrom(methodParameter.getParameterType())){return true; }else{return false; } } }return false; }@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { String body = "";try { HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class); body = CommonUtil.getBodyString(request); } catch (Exception e) { e.printStackTrace(); }if(List.class.isAssignableFrom(methodParameter.getParameterType())){ List resultList = new ArrayList(); ParameterizedType parameterizedType = (ParameterizedType) methodParameter.getGenericParameterType(); Class clazz = (Class)parameterizedType.getActualTypeArguments()[0]; List<Field> fs = Arrays.asList(clazz.getDeclaredFields()); JSONArray array = JSONArray.parseArray(body);for (Object temp:array) { JSONObject obj = JSONObject.parseObject(temp.toString()); List<String> updateFieldList = new ArrayList<>();for (String key : obj.keySet()) {for (Field filed : fs) {if (key.toLowerCase().equals(filed.getName().toLowerCase())) { updateFieldList.add(key.toLowerCase());continue; } } } obj.put("updateFieldList",updateFieldList); resultList.add(obj); }return JSONArray.parseArray(resultList.toString(),clazz); }else{ Class clazz = methodParameter.getParameterType(); List<String> updateFieldList = new ArrayList<>(); List<Field> fs = Arrays.asList(clazz.getDeclaredFields()); JSONObject obj = JSON.parseObject(body);for (String key : obj.keySet()) {for (Field filed : fs) {if (key.toLowerCase().equals(filed.getName().toLowerCase())) { updateFieldList.add(key.toLowerCase());continue; } } } obj.put("updateFieldList",updateFieldList);return JSON.parseObject(obj.toString(),clazz); } } }
將自定義BaseModelMethodArgumentResolver 加入到配置中去
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new BaseModelMethodArgumentResolver()); } }
進(jìn)行自定義UpdateWrapper構(gòu)造
public <T extends BaseModel> UpdateWrapper getUpdateWrapper(T entity){ UpdateWrapper<T> updateWrapper = new UpdateWrapper<T>();try{ Class clazz = entity.getClass(); List<Field> fs = Arrays.asList(clazz.getDeclaredFields()); List<String> updateFieldList = entity.getUpdateFieldList(); if(updateFieldList!=null){ for (String updateFiled:updateFieldList ) { for (Field field:fs) { field.setAccessible(true); if(field.getName().toLowerCase().equals(updateFiled)){ Object fieldValue = field.get(entity); updateWrapper.set(fieldValue==null,field.getName(),null); continue; } } } } return updateWrapper; }catch (Exception e){ e.printStackTrace(); }return updateWrapper; }
注:對標(biāo)記TableField忽略注解的字段可以優(yōu)化,反射可以應(yīng)用初始化時掃描加入緩存進(jìn)行優(yōu)化
以上就是springboot中如何使用mybatis-plus表單更新null值,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:springboot中如何使用mybatis-plus表單更新null值
分享路徑:http://muchs.cn/article46/joppeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、全網(wǎng)營銷推廣、虛擬主機、網(wǎng)頁設(shè)計公司、App設(shè)計、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)