修改造成数据丢失

修改造成数据丢失

修改数据时,发现有些数据丢失了不能保存完整的数据

解决方式:

    在这里,咱们有三个解决方案:
    方案一:隐藏要传递的值(只隐藏,但是数据还是需要传递,这和第一个项目是同相同的方案)
    这个方案的优点是简单易理解,缺点是如果字段过多,代码量会比较大,另外这种方案的安全性确实是有一些低!

方案二:在JPA的相应字段上加标签:
@Column(updatable = false)
private String password;

方案三:先查询数据库,获取持久状态的对象,然后把页面的数据set到对象里面
(这种方案也是用得比较多的一种方案)
Employee tempEmployee = employeeService.get(employee.getId());
//需要修改的值就从页面里面的employee放入tempEmployee
tempEmployee.setUsername(employee.getUsername());
employeeService.save(tempEmployee);

#使用第三种方式(@ModelAttribute注解)
运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;
运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;

代码

这时候,我们可以看到这个类所有的方法(通过路@RequestMapping)访问之前都会先访问这个方法。接下来,我们可以看一下这个是怎么传值的。
在下面的传值代码中我们也解决了数据丢失的问题。
//这里准备一个方法,所有方法执行前都会执行它
@ModelAttribute(“editEmployee”)
public Employee beforeEdit(Long id){
if(id!=null){
Employee employee = employeeService.findOne(id);
return employee;
}
return null;
}

@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(Employee employee){
return saveOrUpdate(employee);
}

@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(@ModelAttribute(“editEmployee”)Employee employee){
return saveOrUpdate(employee);

}

现在所有方法都会进入到beforeEdit中,那么只要传过来id,就会执行这个方法,这个对效率是会有影响的。所以我们可以对代码进行修改,让只有修改功能才去执行这个查询代码!!

前台再传一个cmd=update的参数就可以了

/**

  • 特性:在执行相应方法之前都会先执行这个方法
    */
    @ModelAttribute(“editEmployee”)
    public Employee beforeEdit(Long id, String cmd){
    //有id的时候-> 修改功能
    if(id!=null && “update”.equals(cmd)) {
    Employee employee = employeeService.findOne(id);
    return employee;
    }
    return null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值