springmvc和mybatis整合—商品修改

作者: 小小蒜头 | 来源:发表于2017-12-11 15:28 被阅读42次

    1. 需求

    操作流程:
    1、进入商品查询列表页面
    2、点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询)从数据库查询,根据商品id(主键)查询商品信息
    3、在商品修改页面,修改商品信息,修改后,点击提交

    2. 开发mapper

    mapper:根据id查询商品信息、根据id更新Items表的数据
    不用开发了,使用逆向工程生成的代码。

    ItemsMapper.java

    package com.eurasia.mapper;
    
    import com.eurasia.pojo.Items;
    
    public interface ItemsMapper {
        int deleteByPrimaryKey(Integer id);
    
        int insert(Items record);
    
        int insertSelective(Items record);
    
        Items selectByPrimaryKey(Integer id);
    
        int updateByPrimaryKeySelective(Items record);
    
        int updateByPrimaryKeyWithBLOBs(Items record);
    
        int updateByPrimaryKey(Items record);
    }
    

    ItemsMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.eurasia.mapper.ItemsMapper" >
        <resultMap id="BaseResultMap" type="com.eurasia.pojo.Items" >
            <id column="id" property="id" jdbcType="INTEGER" />
            <result column="name" property="name" jdbcType="VARCHAR" />
            <result column="price" property="price" jdbcType="REAL" />
            <result column="pic" property="pic" jdbcType="VARCHAR" />
            <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
        </resultMap>
    
        <resultMap id="ResultMapWithBLOBs" type="com.eurasia.pojo.Items" extends="BaseResultMap" >
            <result column="detail" property="detail" jdbcType="LONGVARCHAR" />
        </resultMap>
    
        <sql id="Base_Column_List" >
            id, name, price, pic, createtime
        </sql>
        <sql id="Blob_Column_List" >
            detail
        </sql>
    
        <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Integer" >
            select
            <include refid="Base_Column_List" />
            ,
            <include refid="Blob_Column_List" />
            from items
            where id = #{id,jdbcType=INTEGER}
        </select>
    
        <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.eurasia.pojo.Items" >
            update items
            set name = #{name,jdbcType=VARCHAR},
            price = #{price,jdbcType=REAL},
            pic = #{pic,jdbcType=VARCHAR},
            createtime = #{createtime,jdbcType=TIMESTAMP},
            detail = #{detail,jdbcType=LONGVARCHAR}
            where id = #{id,jdbcType=INTEGER}
        </update>
    </mapper>
    

    3. 开发service

    接口功能:根据id查询商品信息、修改商品信息

     //根据id查询商品信息
        public ItemsCustom findItemsById(Integer id) throws Exception;
    
        //修改商品信息
        public ItemsCustom updateItems(Integer id, ItemsCustom itemsCustom) throws Exception;
    

    实现类

    package com.eurasia.service.impl;
    
    import com.eurasia.mapper.ItemsMapper;
    import com.eurasia.mapper.ItemsMapperCustom;
    import com.eurasia.pojo.Items;
    import com.eurasia.pojo.ItemsCustom;
    import com.eurasia.pojo.ItemsQueryVo;
    import com.eurasia.service.ItemsService;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.List;
    
    /**
     * Created by yvettee on 2017/12/3.
     */
    public class ItemsServiceImpl implements ItemsService {
        @Autowired
        private ItemsMapperCustom itemsMapperCustom;
        @Autowired
        private ItemsMapper itemsMapper;
    
        public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception {
            //通过ItemsMapperCustom查询数据库
            return itemsMapperCustom.findItemsList(itemsQueryVo);
        }
    
        public ItemsCustom findItemsById(Integer id) throws Exception {
            Items items = itemsMapper.selectByPrimaryKey(id);
    //        if(items==null){
    //            throw new CustomException("修改的商品信息不存在!");
    //        }
            //中间对商品信息进行业务处理
            //....
            //返回ItemsCustom
            ItemsCustom itemsCustom = null;
            //将items的属性值拷贝到itemsCustom
            if(items!=null){
                itemsCustom = new 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);
        }
    }
    
    

    4. 开发controller

    限定GET方法
    @RequestMapping(method = RequestMethod.GET)
    限定POST方法
    @RequestMapping(method = RequestMethod.POST)
    GET和POST都可以
    @RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

        //商品信息修改页面展示
    //    @RequestMapping("/editItems")
        //限制http请求方法
        @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 {
            //调用service根据id查询商品信息
            ItemsCustom itemsCustom = itemsService.findItemsById(items_id);
    //        modelAndView.setViewName("/items/editItems");
            //通过形参中的model将model数据传到页面,modelAndView.addObject("itemsCustom", itemsCustom);
            model.addAttribute("itemsCustom", itemsCustom);
            return "/items/editItems";
        }
    
        //商品信息修改提交
        @RequestMapping("/editItemsSubmit")
        public String editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom) throws Exception {
            //调用service更新商品信息,页面需要将商品信息传到此方法
            itemsService.updateItems(id, itemsCustom);
            //重定向
            return "forward:queryItems.action";
        }
    

    pojo参数绑定

    页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。

    页面定义
    controller的pojo形参的定义
    测试

    自定义参数绑定实现日期类型绑定

    • 对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。
    • 将请求日期数据串转成日期类型,要转换的日期类型和pojo*中日期属性的类型保持一致。
    • 所以自定义参数绑定将日期字符串转成java.util.Date类型。
    pojo类

    需要向处理器适配器中注入自定义的参数绑定组件

    自定义日期类型绑定 配置方式:springmvc.xml

    上篇:springmvc和mybatis整合—商品查询
    下篇:注解开发validation校验
    源代码:https://github.com/yvettee36/SpringMVC_mybatis

    相关文章

      网友评论

        本文标题:springmvc和mybatis整合—商品修改

        本文链接:https://www.haomeiwen.com/subject/putfixtx.html