java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
private final String defaultStr = ""; private final Date defaultDate = new Date(); private final BigDecimal defaultDecimal = new BigDecimal(0); private final Timestamp defaultTimestamp=new Timestamp(new Date().getTime()); //賦默認(rèn)值 public void setDefaultValue(Object object) { try { Class clazz = object.getClass(); Field[] fields = clazz.getDeclaredFields(); String primaryKey = EntityUtil.getPrimaryKey(currentSession(), object.getClass()); for(int i=0;i<fields.length;i++){ Field field = fields[i]; String fieldName = field.getName(); Class fieldClass=field.getType(); field.setAccessible(true); //設(shè)置訪問權(quán)限 if(!fieldName.equals(primaryKey) && isFieldValueNull(fieldName,object)){ if (fieldClass == Integer.class ) { field.set(object, defaultDecimal.intValue()); }else if (fieldClass == Long.class) { field.set(object, defaultDecimal.longValue()); }else if (fieldClass == Float.class) { field.set(object, defaultDecimal.doubleValue()); }else if (fieldClass == BigDecimal.class) { field.set(object, defaultDecimal); } else if (fieldClass == Date.class) { field.set(object, defaultDate); } else if (fieldClass == String.class){ field.set(object, defaultStr); // 設(shè)置值 } else if (fieldClass == Timestamp.class){ field.set(object, defaultTimestamp); } }else if(fieldName.equals(primaryKey) && isStringFieldValueNull(fieldName,object,fieldClass)){//MySQL,需要對(duì)對(duì)主鍵做特殊處理 field.set(object, null); } } } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } //判斷字段是否為空 private boolean isFieldValueNull(String fieldName, Object object) throws ClassNotFoundException { boolean isNUll=false; try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = object.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(object, new Object[] {}); if(value==null){ isNUll=true; } return isNUll; } catch (Exception e) { return isNUll; } } //判斷主鍵是否為空值 private boolean isStringFieldValueNull(String fieldName, Object object, Class fieldClass) throws ClassNotFoundException { boolean isNUll=false; try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = object.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(object, new Object[] {}); if(value==null ){ isNUll=true; }else{ if (fieldClass == String.class && StringUtils.isBlank((String)value)) { isNUll=true; } } return isNUll; } catch (Exception e) { return isNUll; } }
給實(shí)體類賦默認(rèn)值通用方法
package com.clamc.common.util; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.sql.Date; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; /** * yangzhiwei * 使用反射給實(shí)體類k賦值(默認(rèn)值) * insert update會(huì)報(bào)null異常,為空時(shí)不能插入和更新 */ public class ObjInvoke { public static Object getObjDefault(Object obj) { // 得到類對(duì)象 Class objCla = obj.getClass(); Field[] fs = objCla.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { Field f = fs[i]; // 設(shè)置些屬性是可以訪問的 boolean isStatic = Modifier.isStatic(f.getModifiers()); if(isStatic){ continue; } // 設(shè)置些屬性是可以訪問的 f.setAccessible(true); try { // 得到此屬性的值 Object val = f.get(obj); // 得到此屬性的類型 String type = f.getType().toString(); if (type.endsWith("String") && val == null) { // 給屬性設(shè)值 f.set(obj, ""); } else if ((type.endsWith("int") || type.endsWith("Integer") || type.endsWith("double")) && val == null) { f.set(obj, 0); }else if ((type.endsWith("long")|| type.endsWith("Long") )&& val == null){ f.set(obj, 0L); } else if (type.endsWith("Date") && val == null) { f.set(obj, Date.valueOf("1970-01-01")); }else if(type.endsWith("Timestamp") && val == null){ f.set(obj, Timestamp.valueOf("1970-01-01 00:00:00")); } else if (type.endsWith("BigDecimal") && val == null) { f.set(obj, new BigDecimal(0)); } } catch (Exception e) { e.printStackTrace(); } } return obj; } public static List getObjDefaultList(List objList) { List list=new ArrayList(); for(Object t:objList){ list.add(getObjDefault(t)); } return list; } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼
- Java如何將任意類型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
- java開發(fā)BeanUtils類解決實(shí)體對(duì)象間賦值
- Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
- java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類代碼實(shí)例
- 淺談Java實(shí)體對(duì)象的三種狀態(tài)以及轉(zhuǎn)換關(guān)系
- Java利用反射自動(dòng)封裝成實(shí)體對(duì)象的方法
- Java如何通過反射將map轉(zhuǎn)換為實(shí)體對(duì)象
相關(guān)文章
SpringMVC如何把后臺(tái)文件打印到前臺(tái)
這篇文章主要介紹了SpringMVC如何把后臺(tái)文件打印到前臺(tái),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java 如何從spring容器中獲取注入的bean對(duì)象
這篇文章主要介紹了Java 如何從spring容器中獲取注入的bean對(duì)象,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例
這篇文章主要介紹了JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java將Object轉(zhuǎn)換為數(shù)組的代碼
這篇文章主要介紹了Java將Object轉(zhuǎn)換為數(shù)組的情況,今天在使用一個(gè)別人寫的工具類,這個(gè)工具類,主要是判空操作,包括集合、數(shù)組、Map等對(duì)象是否為空的操作,需要的朋友可以參考下2022-09-09關(guān)于Java企業(yè)級(jí)項(xiàng)目開發(fā)思想
Java企業(yè)級(jí)項(xiàng)目開發(fā)思想。偶遇,讀有所得,遂分享給大家,本文不涉及案例,只談思想和理念,需要的朋友可以參考。2017-09-09關(guān)于動(dòng)態(tài)參數(shù)使用@PathVariable的解析
這篇文章主要介紹了關(guān)于動(dòng)態(tài)參數(shù)使用@PathVariable的解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java lombok中@Accessors注解三個(gè)屬性的作用
這篇文章主要介紹了Java?lombok的@Accessors注解屬性解析,該注解主要作用是:當(dāng)屬性字段在生成?getter?和?setter?方法時(shí),做一些相關(guān)的設(shè)置,需要的朋友可以參考下2023-05-05Java中Random簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文詳細(xì)給大家介紹了Java中Random簡(jiǎn)介相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06SpringBoot搭配AOP實(shí)現(xiàn)自定義注解
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何搭配AOP實(shí)現(xiàn)自定義注解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12