文章目录
问题描述
使用Mybatis+Spring+SpringMVC集成框架完成数据修改时,我发现我写的代码无法成功修改数据库里面的内容,我可以拿到该条数据的所有信息,但是在我修改时信息就会丢失,经过调试我发现问题所在,直接上代码。
一、代码
1.Controller
1.1获取该条数据信息
代码如下:
@RequestMapping("getUserByUid")
public String getUserByUid(Model model,int uid){
User user = userService.getUserByUid(uid);
System.out.println(user + "---------getUser");
model.addAttribute("user",user);
return "updateUser";
}
1.2修改数据信息,跳转页面
代码如下:
@RequestMapping("updateUser")
public String updateUser(User user){
userService.updateUser(user);
return "redirect:getlist";
}
2.Service
2.1 通过调用持久层实例化对象通过Id拿到该条信息数据
代码如下:
@Override
public User getUserByUid(int uid) {
return userMapper.selectByPrimaryKey(uid);
}
2.2 调用持久层实例化对象修改数据信息
代码如下:
@Override
public void updateUser(User user) {
System.out.println(user + "-------updateUser");
int i = userMapper.updateByPrimaryKeySelective(user);
System.out.println(i);
}
二、Idea调试
1.错误案例演示
1.1 查询所有信息
1.2 点击编辑链接获取该条数据信息
可以从控制台看到我已经拿到了该条数据的所有信息,注意我此时是获取到该条数据的ID 信息的。
1.3 显示该条数据信息
1.4 修改信息
1.5 提交数据查看控制台信息
可以通过ID拿到具体数据的全部信息,但是在修改的时候却不能拿到跟上次相同的信息,问题就出现在修改数据时传数据的地方,我检查了前端jsp页面发现了问题所在。
三、问题所在
jsp代码如下:
<form action="updateUser" method="post">
名字:<input type="text" name="uname" value="${user.uname}"><br>
年龄:<input type="text" name="age" value="${user.age}"><br>
性别:<input type="radio" value="女" name="sex" <c:if test="${user.sex eq '女'}" >checked</c:if> >女
<input type="radio" value="男" name="sex" <c:if test="${user.sex eq '男'}">checked</c:if> >男
<br>
地址:<input type="text" name="address" value="${user.address}"><br>
<input type="submit" value="修改用户">
<input type="button" value="取消">
</form>
后台通过ID拿到数据传给该页面,该页面通过el表达式拿到数据,而后来的修改数据是通过该页面再次传给后台处理的,可以看到我这里并没有将ID的信息传给后台,问题就出在这里,真的是小问题大麻烦。
在form表单中添加ID属性:
<input type="hidden" name="uid" value="${user.uid}">