业务场景:
一张表结构为:用户id,姓名,年龄。用户提交表单修改数据时候只是修改姓名的时候,后台要先从数据库获取原始数据到实体,然后修改用户名,最后保存数据库。
原始数据 [uid=123, uname=说易事, age=25]
修改数据库的数据 [uid=123, uname=ZhangSan, age=25]
代码片段:
提交的表单:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <h2>Hello World !</h2> <form action="home/update"> uid:<input type="text" name="uid" value="123"/> <br/> uname:<input type="text" name="uname" value="ZhangSan"/> <br/> <input type="submit" value="修改"> </form> <br/> </body> </html>
控制器:
package com.shuoeasy.springmvc; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/home") @Controller public class Home { /** * 第一步:先获取数据库的数据(这里不是直接给页面请求的,提供给springmvc使用而已) * 被@ModelAttribute注释的方法会在此controller每个方法执行前被执行 * @param uid * @param map */ @ModelAttribute private void getUser(@RequestParam(value="uid",required=false) Integer uid, Map<String,Object> map){ if(uid != null){ // 模拟从数据库获取数据 User u = new User(); u.setUid(123); u.setUname("说易事"); u.setAge(25); map.put("user", u); System.out.println("数据库数据 User=" + u); } } /** * 第二步:修改用户信息,真正请求的地址 * 路径 : home/update */ @RequestMapping("/update") public String showPage(User user){ System.out.println("整理后数据 User=" + user); // 写入数据库代码略 return "home_index"; } }
控制台输出啊:
数据库数据 User=User [uid=123, uname=说易事, age=25] 整理后数据 User=User [uid=123, uname=ZhangSan, age=25]