服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - java中给实体对象属性的空值赋默认值

java中给实体对象属性的空值赋默认值

2022-08-14 10:06我觉得OK Java教程

这篇文章主要介绍了java中给实体对象属性的空值赋默认值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

给实体对象属性的空值赋默认值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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());
//赋默认值
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); //设置访问权限
                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); // 设置值
                    } else if (fieldClass == Timestamp.class){
                        field.set(object, defaultTimestamp);
                    }
                }else if(fieldName.equals(primaryKey) && isStringFieldValueNull(fieldName,object,fieldClass)){//MySQL,需要对对主键做特殊处理
                    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;   
        }   
    }

给实体类赋默认值通用方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
 * 使用反射给实体类k赋值(默认值)
 * insert update会报null异常,为空时不能插入和更新
 */
public class ObjInvoke {
    public static Object getObjDefault(Object obj) {
        // 得到类对象
        Class objCla = obj.getClass();
        Field[] fs = objCla.getDeclaredFields();
        for (int i = 0; i < fs.length; i++) {
            Field f = fs[i];
            // 设置些属性是可以访问的
            boolean isStatic = Modifier.isStatic(f.getModifiers());
            if(isStatic){
                continue;
            }
            // 设置些属性是可以访问的
            f.setAccessible(true);
            try {
                // 得到此属性的值
                Object val = f.get(obj);
                // 得到此属性的类型
                String type = f.getType().toString();
                if (type.endsWith("String") && val == null) {
                    // 给属性设值
                    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;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_33734094/article/details/80450586

延伸 · 阅读

精彩推荐