JPA之update操作 您所在的位置:网站首页 userid为空怎么解决 JPA之update操作

JPA之update操作

2023-09-05 19:01| 来源: 网络整理| 查看: 265

问题:修改更新数据库部分字段,用save()方法进行update操作,未修改字段默认为null。 User表有username,id,phone,email,password字段,只修改usernam和phone, 修改操作:

1.拿到前端传递的实体user;

2.根据user的userId,拿到原始的对象(修改前的user对象);

Long userId = user.getUserId(); //获取userId User oldUser = userDao.findByUserId(userId); //根据userId得到修改前原user对象

3.将前端传递过来的不为空的参数,也就是要修改的值copy复制来覆盖原始对象

UpdateUtil.copyNullProperties(user,oldUser);

解决方法:写一个工具类,筛选出前端传递过来要修改的实体user中为null的字段,然后将不为空的参数(也就是要修改的参数覆盖原来数据库中修改前的参数)(也就是要修改的进行修改,不修改的保持不变)。

1.工具类:UpdateUtil.java

/** * 更新工具类(忽略为null的字段) */ public class UpdateUtil { /** * 所有为空值的属性都不copy * @param source * @param target */ public static void copyNullProperties(Object source, Object target) { BeanUtils.copyProperties(source, target, getNullField(source)); } /** * 获取属性中为空的字段 * * @param target * @return */ private static String[] getNullField(Object target) { BeanWrapper beanWrapper = new BeanWrapperImpl(target); PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors(); Set notNullFieldSet = new HashSet(); if (propertyDescriptors.length > 0) { for (PropertyDescriptor p : propertyDescriptors) { String name = p.getName(); Object value = beanWrapper.getPropertyValue(name); if (Objects.isNull(value)) { notNullFieldSet.add(name); } } } String[] notNullField = new String[notNullFieldSet.size()]; return notNullFieldSet.toArray(notNullField); } }

2.UserService.java

public void updateUser(User user) //前端传递user实体 { Long userId = user.getUserId(); User oldUser = userDao.findByUserId(userId); //根据userId找到原user实体 if (StringUtils.isNotNull(oldUser)){ //如果oldUser不为空 //将前端传来的不为空参数(也即是要修改值)copy覆盖原始对象属性值 UpdateUtil.copyNullProperties(user,oldUser); //修改的字段覆盖原对象 } userDao.save(oldUser); //更新到数据库 }

3.数据层:UserDao.java

@Repository public interface UserDao extends JpaRepository {}

参考链接:https://www.zhangshengrong.com/p/Z9a23QbzNV/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有