java实体非空判断

判断实体里的所有属性值,只要有一个不为空,则返回true,都为空则返回false。

package com.test.utils;

import org.apache.commons.lang.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class EntityIsNotEmpty {

    /**
     * 判断实体对象是否为空
     * @param object
     * @return
     */
    public static Boolean isNotEmptyBean(Object object) {

        Boolean flag = false;

        try {
            if (null != object){

                //得到类对象
                Class<?> c = object.getClass();

                //得到属性集合
                Field[] fs = c.getDeclaredFields();

                //得到方法体集合
                Method[] methods = c.getDeclaredMethods();

                //遍历属性

                for (Field f : fs) {

                    //设置属性是可以访问的(私有的也可以)
                    f.setAccessible(true);
                    String fieldGetName = parGetName(f.getName());

                    //判断属性是否存在get方法
                    if (!checkGetMet(methods, fieldGetName)) {
                        continue;
                    }

                    //得到此属性的值
                    Object val = f.get(object);

                    //只要有1个属性不为空,那么就不是所有的属性值都为空
                    if (isNotEmpty(val)) {
                        flag = true;
                        break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 判断属性值是否为null或空串。
     * 借鉴org.apache.commons.lang.StringUtils同名方法
     * @param object
     * @return
     */
    public static boolean isNotEmpty(Object object) {
        return object != null && !object.equals("");
    }

    /**
     * 拼接某属性的 get方法,set方法类似
     * @param fieldName
     * 参数样式可以示例为:stu_info、_stu_info、stuInfo、StuInfo
     * @return String
     */
    public static String parGetName(String fieldName) {
        if (null == fieldName || "".equals(fieldName)) {
            return null;
        }
        while (StringUtils.indexOf(fieldName,"_") > -1) {

            //获取所有下划线之后一位,例如:stu_info_detail,返回 i,d
            String charFieldName = StringUtils.substring(fieldName,StringUtils.indexOf(fieldName,"_") + 1,
                    StringUtils.indexOf(fieldName,"_") + 2);
            fieldName = StringUtils.replace(fieldName,"_" + charFieldName, charFieldName.toUpperCase());
            System.err.println(charFieldName);
        }

        //对第一位大写处理
        fieldName = fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
        return "get" + fieldName;
    }

    /**
     * 判断是否存在某属性的 get方法
     * @param methods
     * @param fieldGetMet
     * @return boolean
     */
    public static Boolean checkGetMet(Method[] methods, String fieldGetMet) {

        for (Method met : methods) {
            if (fieldGetMet.equals(met.getName())) {
                return true;
            }
        }
        return false;
    }
}

测试实体

package com.test.pojo;

import lombok.Data;

@Data
public class MusicPojo {
    private Integer id;
    private String singerName;
    private String musicSize;
    private String musicName;
}

测试用例

import java.lang.reflect.Field;

public class Demo{

    public static void main(String[] args) {
        MusicPojo musicPojo = new MusicPojo();
        musicPojo.setId(1);
        musicPojo.setMusicName("lost star");
        musicPojo.setMusicSize("31.5M");
        musicPojo.setSingerName("Grace");

        Boolean flag = entityNotNull(musicPojo);
        System.err.println(flag);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值