• springmvc学习笔记(10)-springmvc注解开发之商品改动功能


    springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    标签: springmvc



    本文以商品改动为例,记录springmvc的注解开发。包含mapper,service,controller,@RequestMapping,controller方法的返回值等

    需求

    操作流程:

    • 1.进入商品查询列表页面
    • 2.点击改动,进入商品改动页面,页面中显示了要改动的商品。要改动的商品从数据库查询,依据商品id(主键)查询商品信息
    • 3.在商品改动页面,改动商品信息,改动后,点击提交

    开发mapper

    mapper:

    • 依据id查询商品信息
    • 依据id更新Items表的数据

    不用开发了,使用逆向project生成的代码。

    开发service

    com.iot.learnssm.firstssm.service.ItemsService中加入两个接口

      //依据id查询商品信息
        /**
         *
         * <p>Title: findItemsById</p>
         * <p>Description: </p>
         * @param id 查询商品的id
         * @return
         * @throws Exception
         */
         ItemsCustom findItemsById(Integer id) throws Exception;
    
        //改动商品信息
        /**
         *
         * <p>Title: updateItems</p>
         * <p>Description: </p>
         * @param id 改动商品的id
         * @param itemsCustom 改动的商品信息
         * @throws Exception
         */
         void updateItems(Integer id,ItemsCustom itemsCustom) throws Exception;
    

    com.iot.learnssm.firstssm.service.impl.ItemsServiceImpl中实现接口,添加itemsMapper属性

    @Autowired
    private ItemsMapper itemsMapper;
    
    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;
    }
    
    public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
        //加入业务校验,通常在service接口对关键參数进行校验
        //校验 id是否为空,假设为空抛出异常
    
        //更新商品信息使用updateByPrimaryKeyWithBLOBs依据id更新items表中全部字段。包含 大文本类型字段
        //updateByPrimaryKeyWithBLOBs要求必须转入id
        itemsCustom.setId(id);
        itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
    }

    开发controller

    方法:

    • 商品信息改动页面显示
    • 商品信息改动提交
    //使用@Controller来标识它是一个控制器
    @Controller
    //为了对url进行分类管理 ,能够在这里定义根路径,终于訪问url是根路径+子路径
    //比方:商品列表:/items/queryItems.action
    //@RequestMapping("/items")
    public class ItemsController {
    
        @Autowired
        private ItemsService itemsService;
    
        //商品查询列表
        @RequestMapping("/queryItems")
        //实现 对queryItems方法和url进行映射。一个方法相应一个url
        //一般建议将url和方法写成一样
        public ModelAndView queryItems() throws Exception{
            //调用service查找数据库,查询商品列表
            List<ItemsCustom> itemsList = itemsService.findItemsList(null);
    
            //返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
            //相当于request的setAttribute方法,在jsp页面中通过itemsList取数据
            modelAndView.addObject("itemsList",itemsList);
    
            //指定视图
            //下边的路径,假设在视图解析器中配置jsp的路径前缀和后缀,改动为items/itemsList
            //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
            //下边的路径配置就能够不在程序中指定jsp路径的前缀和后缀
            modelAndView.setViewName("items/itemsList");
    
            return modelAndView;
        }
    
    
        //商品信息改动页面显示
        @RequestMapping("/editItems")
        //限制http请求方法,能够post和get
        //@RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
        public ModelAndView editItems()throws Exception {
    
            //调用service依据商品id查询商品信息
            ItemsCustom itemsCustom = itemsService.findItemsById(1);
    
            // 返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
    
            //将商品信息放到model
            modelAndView.addObject("itemsCustom", itemsCustom);
    
            //商品改动页面
            modelAndView.setViewName("items/editItems");
    
            return modelAndView;
        }
    
        //商品信息改动提交
        @RequestMapping("/editItemsSubmit")
        public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom)throws Exception {
    
            //调用service更新商品信息,页面须要将商品信息传到此方法
            itemsService.updateItems(id, itemsCustom);
    
            //返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
            //返回一个成功页面
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    }
    

    @RequestMapping

    • url映射

    定义controller方法相应的url,进行处理器映射使用。

    • 窄化请求映射
    //使用@Controller来标识它是一个控制器
    @Controller
    //为了对url进行分类管理 。能够在这里定义根路径,终于訪问url是根路径+子路径
    //比方:商品列表:/items/queryItems.action
    @RequestMapping("/items")
    public class ItemsController {
    • 限制http请求方法

    出于安全性考虑。对http的链接进行方法限制。

    //商品信息改动页面显示
        //@RequestMapping("/editItems")
        //限制http请求方法。能够post和get
        @RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
        public ModelAndView editItems()throws Exception {

    假设限制请求为post方法。进行get请求,即将上面代码的注解改为@RequestMapping(value="/editItems",method={RequestMethod.POST})

    报错,状态码405:

    GET拒绝

    controller方法的返回值

    • 返回ModelAndView

    须要方法结束时,定义ModelAndView,将model和view分别进行设置。

    • 返回string

    假设controller方法返回string

    1.表示返回逻辑视图名。

    真正视图(jsp路径)=前缀+逻辑视图名+后缀

    @RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
    //@RequestParam里边指定request传入參数名称和形參进行绑定。

    //通过required属性指定參数是否必须要传入 //通过defaultValue能够设置默认值。假设id參数没有传入。将默认值和形參绑定。 //public String editItems(Model model, @RequestParam(value="id",required=true) Integer items_id)throws Exception { public String editItems(Model model)throws Exception { //调用service依据商品id查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(1); //通过形參中的model将model数据传到页面 //相当于modelAndView.addObject方法 model.addAttribute("itemsCustom", itemsCustom); return "items/editItems"; }

    2.redirect重定向

    商品改动提交后,重定向到商品查询列表。

    redirect重定向特点:浏览器地址栏中的url会变化。改动提交的request数据无法传到重定向的地址。由于重定向后又一次进行request(request无法共享)

    //重定向到商品查询列表
    //return "redirect:queryItems.action";

    3.forward页面转发

    通过forward进行页面转发,浏览器地址栏url不变,request能够共享。

    //页面转发
    return "forward:queryItems.action";
    • 返回void

    在controller方法形參上能够定义request和response。使用request或response指定响应结果:

    1.使用request转向页面,例如以下:

    request.getRequestDispatcher("页面路径").forward(request, response);

    2.也能够通过response页面重定向:

    response.sendRedirect("url")

    3.也能够通过response指定响应结果。比如响应json数据例如以下:

    response.setCharacterEncoding("utf-8");
    response.setContentType("application/json;charset=utf-8");
    response.getWriter().write("json串");

    作者@brianway很多其它文章:个人站点 | CSDN | oschina

  • 相关阅读:
    20191224 Spring官方文档(Overview)
    20191224 Spring官方文档(启动)
    20191209 【归档】Linux就该这么学
    20191209 Linux就该这么学(6)
    20191209 Linux就该这么学(5)
    20191209 Linux就该这么学(4)
    20191209 Linux就该这么学(1-3)
    20191128 Spring Boot官方文档学习【目录】
    加密在卷积神经网络上的应用
    Federated Optimization: Distributed Machine Learning for On-Device Intelligence
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7110903.html
Copyright © 2020-2023  润新知