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形参的定义
测试
自定义参数绑定实现日期类型绑定
- 对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。
- 将请求日期数据串转成日期类型,要转换的日期类型和pojo*中日期属性的类型保持一致。
- 所以自定义参数绑定将日期字符串转成
java.util.Date
类型。
需要向处理器适配器中注入自定义的参数绑定组件
自定义日期类型绑定 配置方式:springmvc.xml上篇:springmvc和mybatis整合—商品查询
下篇:注解开发validation校验
源代码:https://github.com/yvettee36/SpringMVC_mybatis