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

目录
  • 给实体对象属性的空值赋默认值
  • 给实体类赋默认值通用方法

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

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;
        }
    }
    

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

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;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中判断对象是否为空的方法的详解

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringUtils工具类判断对象是否为空是有差距的: StringUtils.isEmpty(CharSequence cs); //org.apache.commons.lang3包下的StringUtils类,判断是否为空的方法参数是字符序列类,也就是String类型 StringUtils.isEmpt

  • Java判断对象是否为空(包括null ,"")的方法

    本文实例为大家分享了Java判断对象是否为空的具体代码,供大家参考,具体内容如下 package com.gj5u.publics.util; import java.util.List; /** * 判断对象是否为空 * * @author Rex * */ public class EmptyUtil { /** * 判断对象为空 * * @param obj * 对象名 * @return 是否为空 */ @SuppressWarnings("rawtypes") public

  • java如何判断一个对象是否为空对象

    最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象是否为空. 第一版: User.java public class User {     private String username;     private Boolean active;     private Long id;     // 省略get和set方法 } ReflectUtil.java pu

  • java 如何复制非空对象属性值

    目录 java 复制非空对象属性值 然后封装一下得到以下方法 测试方法就不提供了,自行测试即可 java对象属性复制的几种方式 1.使用java反射机制 2.使用spring-beans5.0.8包中的BeanUtils类 3.使用cglib3.2.8包中的net.sf.cglib.beans.BeanCopier类 4.使用spring-core5.0.8包 java 复制非空对象属性值 很多时候,我们需要通过对象拷贝,比如说VO类与数据库实体bean类.更新时非空对象不更新,对同一对象不同数

  • java 对象参数去空格方式代码实例

    这篇文章主要介绍了java 对象参数去空格方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { /** * 去掉bean中所有属性为字符串的前后空格 * * @param bean * @throws Exception */ public static void bea

  • Java 判断实体对象及所有属性是否为空的操作

    1.判断实体对象是否为空 2.判断对象所有属性是否为空 3.特别注意,实体类中如果有基本数据类型,会影响判断 package com.liuxd.object; import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; /** * Created by Liuxd on 2018/11/2. */ public class TestEntity { public static void main(St

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

    目录 给实体对象属性的空值赋默认值 给实体类赋默认值通用方法 给实体对象属性的空值赋默认值 private final String defaultStr = ""; private final Date defaultDate = new Date(); private final BigDecimal defaultDecimal = new BigDecimal(0); private final Timestamp defaultTimestamp=new Timestamp(

  • 基于java中两个对象属性的比较

    两个对象进行比较相等,有两种做法: 1.情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可.这里就不用说明 2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射, 具体代码如下: public static void main(String[] args) { A a = new A(); a.setUserName("a"); a.setPassword("p"); a.setQq("q"); a.

  • Java中List集合对象去重及按属性去重的8种方法

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结. 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件夹的7种方法 总结java中文件拷贝剪切的5种方式 比如之前我已经写了上面的这些内容,如果对java基

  • 关于Java中的dozer对象转换问题

    目录 Java中的dozer对象转换 1.dozer介绍 2.依赖坐标 3.创建测试工厂[dozer_demo] 3.1.引入对应的依赖 3.2.创建UserDTO和UserEntity 3.3.在resources/dozer/目录下创建dozer的全局配置文件global.dozer.xml 3.4.在resources/dozer/目录下创建dozer的映射文件biz.dozer.xml 3.5.编写application.yml文件 3.6.编写项目启动类 3.7.编写单元测试 Java

  • 浅谈java中为什么实体类需要实现序列化

    当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决这个问题我们使用一种技术:session的持久化. 什么是session的持久化? web服务器会把暂时不活动的并且没有失效的HTTPSession对象转移到文件系统或数据库中储存,服务器要用时在把他们转载到内存. 把Session对象转移到文件系统或数据库中储存就需要用到序列化: jav

  • java基于反射得到对象属性值的方法

    本文实例讲述了java基于反射得到对象属性值的方法.分享给大家供大家参考,具体如下: 通过反射机制得到对象中的属性和属性值 在对象中private没问题,在别的类中有时会报异常.下面的例子是在本对象中 /** * Engine entity. @author MyEclipse Persistence Tools */ public class Engine implements java.io.Serializable { // Fields private Long engineId; pr

  • js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进行内容的转化,后来发现不可以,网上说js与java没有桥接的东西,所以呢: 我的解决方案是:在action层,将java的对象数组转化为Json串,而在js中,再把json转化为数组对象. 1.将java的对象数组转化为Json串: 要用到两个类: net.sf.json.JSONObject ne

  • 深入了解java中的string对象

    这里来对Java中的String对象做一个稍微深入的了解. Java对象实现的演进 String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以便提升String对象的性能. Java6以及之前版本中String对象的属性 在Java6以及之前版本中,String对象是对char数组进行了封装实现的对象,其主要有4个成员成员变量,分别是char数组.偏移量offset.字符数量count和哈希值hash.String对象是通过offset和

  • 关于Java中BeanMap进行对象与Map的相互转换问题

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用 2.通过Java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦 3.通过net.sf.cglib.beans.BeanMap类中的方法,这种方式效率极高,它跟第二种方式的区别就是因为使用了缓存,初次创建bean时需要初

  • 详解处理Java中的大对象的方法

    目录 String中的substring 集合大对象扩容 保持合适的对象粒度 Bitmap 把对象变小 数据的冷热分离 数据双写 写入 MQ 分发 使用 Binlog 同步 思维发散 小结 本文我们将讲解一下对于“大对象”的优化.这里的“大对象”,是一个泛化概念,它可能存放在 JVM 中,也可能正在网络上传输,也可能存在于数据库中. 那么为什么大对象会影响我们的应用性能呢? 第一,大对象占用的资源多,垃圾回收器要花一部分精力去对它进行回收: 第二,大对象在不同的设备之间交换,会耗费网络流量,以及

随机推荐