需求
操作流程:
- 進入商品查詢清單頁面(加載所有商品)
- 點選修改連結,進入商品修改頁面,頁面中加載顯示的是要修改的商品資訊(資料庫查詢得到),根據商品的ID查詢商品資訊
- 在商品的修改頁面修改商品資訊,修改後點選送出至資料庫
開發mapper
mapper: 根據ID查詢商品表資訊 根據ID更新商品表資訊 不需要開發,直接使用逆向工程生成的mapper代碼
開發service
接口: 根據ID查詢商品資訊 修改商品資訊 接口類:
/**
* 根據ID查詢商品資訊
* @param id 查詢商品的ID
* @return 商品的擴充po類
* @throws Exception
*/
public ItemsCustom findItemsById(int id) throws Exception;
/**
* 修改商品資訊
* @param id 修改商品的ID
* @param itemsCustom 修改商品的資料
* @throws Exception
*/
public void updateItems(int id,ItemsCustom itemsCustom) throws Exception;
實作類:
@Override
public ItemsCustom findItemsById(Integer id) throws Exception {
Items items = itemsMapper.selectByPrimaryKey(id);
//對于商品資訊進行業務處理
//....
//最終傳回ItemsCustom
ItemsCustom itemsCustom = new ItemsCustom();
//将items的内容拷貝到itemsCustom
BeanUtils.copyProperties(items,itemsCustom);
return itemsCustom;
}
@Override
public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
//添加業務校驗,通常在service接口中對關鍵的參數進行校驗
//驗證ID是否為空,若為空則抛出異常
//更新商品資訊,使用updateByPrimaryKeyWithBLOBs根據ID更新items表中的所有字段,包括text類型的字段
//使用updateByPrimaryKeyWithBLOBs根據ID更新items表中的所有字段要求必須傳入ID,是以我們再次将Id set進去
itemsCustom.setId(id);
itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
}
開發controller
方法: 商品資訊修改頁面的加載方法 商品頁面修改資訊的送出方法
@RequestMapping
特性:
1. url映射
定義Controller方法所對應的url,進行處理器映射使用。
1.窄化請求映射
@Controller
//對url進行分類管理,可以在此處定義根路徑,最終通路的url是 根路徑+子路徑 比如商品清單 /items/queryItems.action
@RequestMapping("/items")
public class itemsController {
2.限制http的請求方法 處于安全性考慮,限制請求為post方法
//商品修改加載原始資訊
//@RequestMapping("/editItems")
//限制http請求方法為POST
@RequestMapping(value = "/editItems",method = {RequestMethod.POST})
再進行get請求,則會報錯405:
controller方法的傳回值類型
1、傳回ModelAndView 需要在方法結束時定義ModelAndView,将model和view分别進行設定 如:
// 商品修改加載原始資訊
// 限制http請求方法為POST和GET
@RequestMapping(value = "/editItems",method = {RequestMethod.POST,RequestMethod.GET})
public ModelAndView editItems() throws Exception{
//調用service 根據商品ID查詢商品資訊
ItemsCustom itemsCustom = itemsService.findItemsById(5);
//傳回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//将商品資訊放到model中
modelAndView.addObject("itemsCustom",itemsCustom);
//商品修改頁面
modelAndView.setViewName("items/editItems");
return modelAndView;
}
2、傳回String (1) 若Controller的方法傳回的是String,表示傳回邏輯視圖名 真正的視圖(JSP的路徑) = 字首+邏輯視圖名+字尾 如:
@RequestMapping(value = "/editItems",method = {RequestMethod.POST,RequestMethod.GET})
public String editItems(Model model) throws Exception{
//調用service 根據商品ID查詢商品資訊
ItemsCustom itemsCustom = itemsService.findItemsById(5);
// //傳回ModelAndView
// ModelAndView modelAndView = new ModelAndView();
// //将商品資訊放到model中
// modelAndView.addObject("itemsCustom",itemsCustom);
// //商品修改頁面
// modelAndView.setViewName("items/editItems");
//通過形參中的model将model的資料傳到頁面
//相當于modelandview的addObject
model.addAttribute("itemsCustom",itemsCustom);
return "items/editItems";
(2)redirect 重定向 商品修改送出後,重定向到商品查詢清單。 redirect重定向特點:浏覽器位址欄URl會變化,修改送出的request資料無法傳到重定向的位址。因為重定向後會重新進行request(requset無法共享) 如:
//商品修改
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit() throws Exception{
//調用service更新商品資訊,頁面需要将商品資訊傳到此方法
//重定向至商品查詢清單頁面
return "redirect:queryItems.action";
}
(3)forward 頁面轉發 forward頁面轉發特點:url位址欄不變,request可以共享
//商品修改
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit() throws Exception{
//調用service更新商品資訊,頁面需要将商品資訊傳到此方法
//頁面轉發
return "forward:queryItems.action";
}
3、傳回void
(2)redirect 重定向