天天看點

SSM整合之springmvc注解開發

需求

操作流程:

  1. 進入商品查詢清單頁面(加載所有商品)
  2. 點選修改連結,進入商品修改頁面,頁面中加載顯示的是要修改的商品資訊(資料庫查詢得到),根據商品的ID查詢商品資訊
  3. 在商品的修改頁面修改商品資訊,修改後點選送出至資料庫

開發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:

SSM整合之springmvc注解開發

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 重定向