MyBatis Plus修改员工信息(Objects.isNull,BeanUtils.copyProperties方法的使用)

这篇博客介绍了在Java后端如何修改员工信息,包括多表修改、对象空判断及属性复制。通过User实体类和UserDomain进行数据同步,并利用BeanUtils.copyProperties方法简化赋值过程。同时提及了Objects.isNull的等效性和BeanUtils.copyProperties的注意事项。

当需要修改一条数据的时候(比如修改一条员工信息),有以下几个流程

/*
* user是传进来需要修改的实体类:我写的是多表修改所以User是新创建的一个实体类
*(多表修改的时候,需要重新创建一个实体类来放前台传过来的所有参数,要与当前userDomain的名字一一对应,这样通过mp会自动修改值
*/
public String updateUser(User user){
	//通过Id来获取到员工的信息
	UserDomain userDomain = iUserService.getById(user.id);
	//通过Objects.isNull的方法来判断userDomain是否为空,如果是空值那说明没有查到该员工,不能修改
	if(Objects.isNull(userDomain))
		return "没有找到对应的员工信息,修改失败";
	//BeanUtils.copyProperties()第一个值为 源,第二个值为 目标
	BeanUtils.copyProperties(user,userDomain);
	//调用mp自动生成的修改方法进行修改
	iUserservice.update(userDomain);
	return "修改成功";
}

如果获取到的还有公司的信息,就同理再写一份就完成了(记得user表中的属性名一一对应,这样才可以赋值)

>>>>>>扩展>>>>>>

  1. Objects.isNull
    java.util的Objects.isNull和 object == null 从源码上看是没什么区别的,如果非要一探究竟请自行咨询度娘
  public static boolean isNull(Object obj) {
        return obj == null;
    }
  1. BeanUtils.copyProperties
    使用原因:当我们有两个具有很多相同属性的JavaBean,我们可能就会对属性逐个赋值,会出现满屏的set。如果属性再多一点可能会把手指累断,这肯定不行的。
    使用方法BeanUtils.copyProperties("源", "目标");一行就搞定了。
    但是值得提的几个点:(以下用A、B来表示源类、目标类)
    1)b中的存在的属性,a中一定要有,但是a中可以有多余的属性;
    2)a中与b中相同的属性都会被替换,不管是否有值;
    3)a、 b中的属性要名字相同,才能被赋值,不然的话需要手动set赋值;
    4)BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法;
    5)如果存在属性完全相同的内部类,但是不是同一个内部类,即分别属于各自的内部类,则spring会认为属性不同,不会copy;
    6)spring和apache的copy属性的方法源和目的参数的位置正好相反,所以导包和调用的时候都要注意一下。

END

作为一个小菜鸡,这个博客就是写一些最最低级的东西, 扩展都是网上搜的摘抄的,如果有侵权请告知删除。如果你觉得写的很辣鸡,请不要怀疑,那是真的很辣鸡。

// 保存签核单信息 @Override public EtstObjectDto saveCaseInfo(TbEtstFormDataVo formDataVo) { EtstObjectDto resDto = new EtstObjectDto(); TbEtstFormData formData = new TbEtstFormData(); // 获取页面Terminate及lot的信息 TbEtstTerminateData terFormData = formDataVo.getTerminateInfo(); EtstLotInfo lotInfo = formDataVo.getLotList(); // 获取当下时间作为创建时间 // 获取相关数据到对象中 EmployeeInfoVO employeeInfoVO = userService.getEmployeeBaseData(); BeanUtils.copyProperties(formDataVo, formData); formData.setApplicant(employeeInfoVO.getUserName()); formData.setUpdateDate(new Date()); // 更新时间统一设置 // 存lot信息 formData.setLotId(lotInfo.getLotId()) .setLotType(lotInfo.getLotType()) .setLotProdId(lotInfo.getProdId()) .setLotQty(lotInfo.getQty()) .setLotStatus(lotInfo.getStatus()) .setLotStage(lotInfo.getStage()) .setLotStep(lotInfo.getStep()) .setVendorId(lotInfo.getVendorId()) .setVendorLotId(lotInfo.getVendorLotId()) .setWaferId(lotInfo.getWaferId()); // 保存草稿 if ("Draft".equals(formDataVo.getCaseStatus())){ try { // 判断id是否为空,为空则是新建,不为空则是更新 if (Objects.isNull(formDataVo.getId())){ formDataMapper.insert(formData); // 插入后获取下主表ID,获取不到就是有问题 Long generatedId = formData.getId(); if (generatedId == null) { throw new IllegalStateException("插入主表后未能获取自增ID"); } // 获取到了后就设置给子表的caseNo terFormData.setCaseNo(String.valueOf(formData.getId())); terminateDataMapper.insert(terFormData); } else { // 更新的话,先更新主表 formDataMapper.updateById(formData); // 通过caseno去匹配子表中的数据,然后更新 String caseNo = String.valueOf(formData.getId()); // 构建查询条件 LambdaQueryWrapper<TbEtstTerminateData> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TbEtstTerminateData::getCaseNo, caseNo); int count = terminateDataMapper.selectCount(wrapper); if (count > 0) { // 存在则更新(只更新非 null 字段) terminateDataMapper.update(terFormData, wrapper); } else { // 不存在则插入 terminateDataMapper.insert(terFormData); } } } catch (Exception e) { // log.error("插入 GroupFields 记录时发生异常,gfId={}", gfId, e); return resDto.setCode("1").setResult("系统内部错误,插入失败:" + e.getMessage()); } //返回是否插入成功 return resDto.setCode("0").setResult("插入成功"); } 这段代码里,如果我的formdata插入成功后,terminatedata插入失败了,目前formdata的数据不会回滚
最新发布
11-05
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值