java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
更新時(shí)間:2022年03月02日 10:53:26 作者:我覺(jué)得OK
這篇文章主要介紹了java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
給實(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è)置訪問(wèn)權(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è)置些屬性是可以訪問(wèn)的
boolean isStatic = Modifier.isStatic(f.getModifiers());
if(isStatic){
continue;
}
// 設(shè)置些屬性是可以訪問(wèn)的
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開(kāi)發(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如何通過(guò)反射將map轉(zhuǎn)換為實(shí)體對(duì)象
相關(guān)文章
mybatis-plus常用注解@TableId和@TableField的用法
本文主要介紹了mybatis-plus常用注解@TableId和@TableField的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
SpringCloud Config分布式配置中心使用教程介紹
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-12-12
Spring MVC實(shí)現(xiàn)文件上傳及優(yōu)化案例解析
本文介紹如何在SpringMVC框架中實(shí)現(xiàn)文件上傳和異步登錄功能,通過(guò)添加必要的依賴和配置,創(chuàng)建文件上傳頁(yè)面和控制器,實(shí)現(xiàn)文件上傳到指定文件夾,同時(shí),展示了如何使用AJAX實(shí)現(xiàn)局部刷新的異步登錄,優(yōu)化用戶體驗(yàn),詳細(xì)步驟包括配置springmvc.xml、編寫(xiě)前端頁(yè)面和控制器等2024-10-10
Spring Cloud中使用Eureka的詳細(xì)過(guò)程
Eureka 是 Netflix 開(kāi)源的一個(gè)服務(wù)發(fā)現(xiàn)組件,它在微服務(wù)架構(gòu)中扮演著重要的角色,這篇文章主要介紹了Spring Cloud中如何使用Eureka,需要的朋友可以參考下2024-07-07
java 數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09
Java網(wǎng)絡(luò)編程之基于TCP協(xié)議
本文主要將Java基于TCP的網(wǎng)絡(luò)編程主要分解成5個(gè)功能:功能分解1:單向通信功能分解,2:雙向通信功能分解,3:對(duì)象流傳送功能分解,4:加入完整的處理異常方式功能分解,5:多線程接收用戶請(qǐng)求,需要的朋友可以參考下2021-05-05
關(guān)于Elasticsearch封裝公共索引增刪改查
索引是Elasticsearch中存儲(chǔ)數(shù)據(jù)的邏輯單元,類似于關(guān)系數(shù)據(jù)庫(kù)中的表,它包含多個(gè)文檔,每個(gè)文檔都是一個(gè)結(jié)構(gòu)化的JSON數(shù)據(jù)格式,在實(shí)際應(yīng)用中,索引的使用與配置可以依據(jù)不同的方案進(jìn)行,例如在Spring Boot項(xiàng)目中,可以選擇自動(dòng)配置或者手動(dòng)編寫(xiě)配置類2024-10-10

