java 反射案例,使用反射

实体类 

package com.jeesite.modules.openauth.dto;



import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Data
public class SsoPersonnelInfoDTO {

    private String id; // 主键id
    private String updateBy;
    private String createBy;
    private Date updateDate;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date createDate; // 创建时间
    private String status;   // 状态(0正常 1删除 2停用)
    private String code;        // 账户
    private String idCard;        // 身份证号
    private String name;        // 姓名
    private String sex;        // 性别
    private String maritalStatus;        // 婚姻状况
    private String nation;        // 民族
    private String politicalOutlook;        // 政治面貌
    private String birthday;        // 出生日期
    private String nativePlace;        // 籍贯
    private String homeAddress;        // 居住地址
    private String filesAddress;        // 档案所在地
    private String family;        // 家庭信息
    private String education;        // 学历
    private String fulltimeSchool;        // 毕业院校
    private String fulltimeMajor;        // 主专业
    private String phone;        // 联系电话
    private String jobCode;        // 主聘岗位
    private String deptCode;        // 主属部门
    private String zipCode;        // 邮编
    private String qq;        // QQ号
    private String wx;        // 微信号
    private String workDate;        // 参加工作时间
    private String checkinDate;        // 入职时间
    private String workExperience;        // 工作简历
    private String isAttendance;        // 是否考勤
    private String isDepart;        // 是否离职
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date departDate;        // 离职日期
    private String departReason;        // 离职原因
    private String unitId;        // 单位id
    private String departmentId;        // 部门id
    private String jobSid;        // 岗位id
    private String monthWage;        // 月工资
    private String rankTime;        // 任现职级时间
    private String rank2;        // 职级(关联字典表:高层领导、中层正职、中层副职、主管、副主管、专员)
    private String age;        // 年龄(可根据出生年月自动计算)
    private String joinDate;        // 加入时间
    private String healthy;        // 健康状况(字典项)
    private String email;        // 邮箱
    private String englishLevel;        // 英语水平
    private String computerLevel;        // 计算机水平
    private String birthPlace;        // 出生地
    private String residencesAddress;        // 户口所在地
    private String workingState;        // 在职状态(字典项)
    private String specialty;        // 熟悉专业有何特长
    private String fullTimeDegree;        // 全日制学位(字典项)
    private String fullTimeEducation;        // 全日制最高学历(字典项)
    private String jobFirstEducation;        // 在职第一学历(字典项)
    private Date retireDate;        // 退休时间
    private String jobFirstDegree;        // 在职第一学位(字典项)
    private String jobFirstMajor;        // 在职第一专业
    private String jobFirstSchool;        // 在职第一毕业院校
    private String jobHighEsteducation;        // 在职最高学历(字典项)
    private String jobHighEstdegree;        // 在职最高学位(字典项)
    private String jobHighEstmajor;        // 在职最高专业
    private String jobHighestSchool;        // 在职最高毕业院校
    private String delFlag;        // 删除标志
    private String certificates;        // 证书
    private String titles;        // 职务
    private String userSort;        // 人员排序
    private String createUnit;        // 创建人单位
    private String createDept;        // 创建人部门
    private String orgRecBirthday;        // 组织认定出生日期
    private String carNo;        // 车牌号码
    private String remark;        // 备注
    private String isShow;        // 是否显示【0否1是】
    private String joinPartyDate;        // 入党时间
    private String dataSourceSystemKey;        // 数据来源系统
    // 分页页号
    private Integer pageIndex;
    // 页面大小
    private Integer pageSize;
    
}

 通过反射进行组装QueryWrapper 并查询

public String queryUserByCondition(  SsoPersonnelInfoDTO ssoPersonnelInfoDTO ){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        Field[] fields = ssoPersonnelInfoDTO.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                Object val = field.get(ssoPersonnelInfoDTO);
                String keyName = field.getName();
                String key = StrUtil.toUnderlineCase(keyName);
                if(!keyName.equals("pageIndex") &&  !keyName.equals("pageSize")  &&  !keyName.equals("sort") ){
                    if( key.contains("_date") || key.contains("_time") || key.contains("birthday")  ){
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        if( null != val ){
                            String formatStart = sdf.format(val) + " 00:00:00";
                            String formatEnd = sdf.format(val) + " 23:59:59";
                            queryWrapper.gt( key, formatStart);
                            queryWrapper.lt( key, formatEnd);
                        }
                    }else {
                        queryWrapper.like(val != null, key, val);
                    }
                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
        }

        if(StringUtils.isNotEmpty( ssoPersonnelInfoDTO.getSort() )){
            String field = ssoPersonnelInfoDTO.getSort().substring(0, ssoPersonnelInfoDTO.getSort().indexOf(","));
            String keyName = StrUtil.toUnderlineCase( field);
            String orderBy = ssoPersonnelInfoDTO.getSort().substring(
                    ssoPersonnelInfoDTO.getSort().indexOf(","),ssoPersonnelInfoDTO.getSort().length());
            if(orderBy.contains("asc")){
                queryWrapper.orderByAsc(keyName);
            }else {
                queryWrapper.orderByDesc(keyName);
            }
        }else {
            queryWrapper.orderByDesc("create_date");
        }

        Integer pageIndex = ssoPersonnelInfoDTO.getPageIndex();
        if (null == pageIndex || pageIndex <= 0  ) {
            pageIndex = 1;
        }
        Integer pageSize = ssoPersonnelInfoDTO.getPageSize();
        if (null == pageSize || pageSize <= 0) {
            pageSize = 20;
        }
        queryWrapper.eq("status", EnumStatus.NORMAL.getValue());
        IPage iPage = openAuthPersonnelInfoDao.selectPage(new Page<>( pageIndex , pageSize ), queryWrapper);

        List dtoList = iPage.getRecords();
        //脱敏
        if (null != dtoList) {
            for (SsoPersonnelInfo ssoPersonnelInfo : dtoList) {
                encryptDataCenterPersonnel(ssoPersonnelInfo);
            }
        } else {
            dtoList = new ArrayList<>();
        }
        //转换为json字符串
        String json = JSON.toJSONString(iPage);
        return json;
    }

对数据进行脱密处理

 public void encryptDataCenterPersonnel(SsoPersonnelInfo res) {
        //Java实现对手机号、身份证号、护照号脱敏_java 身份证号脱敏_ACGkaka_的博客-CSDN博客
        //https://blog.csdn.net/qq_33204709/article/details/129209039
        //身份证号 脱敏
        String idCard = res.getIdCard();
        if (ObjectUtil.isNotEmpty(idCard)) {
            String encryptIdCard = DesensitizedUtil.idCardNum(idCard, 3, 4);
            res.setIdCard(encryptIdCard);
        }
        //手机号脱敏
        String phone = res.getPhone();
        if (ObjectUtil.isNotEmpty(phone)) {
            String encryptPhone = DesensitizedUtil.mobilePhone(phone);
            res.setPhone(encryptPhone);
        }
    }

你可能感兴趣的:(java,反射)