JavaEE 学习专题ThoughtWorks欧亚创新工作室程序员

springmvc和mybatis整合—商品修改

2017-12-11  本文已影响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形参的定义
测试

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

pojo类

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

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

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

上一篇下一篇

猜你喜欢

热点阅读