收货地址模块技术要点:

1、同步获取自增主键

2、数据绑定的对象绑定

3、越权问题升级巩固

一、新增收货地址

Controller层:

//新建收货地址

@RequestMapping("add.do")

@ResponseBody

public ServerResponse add(HttpSession session,Shipping shipping){

User user = (User)session.getAttribute(Const.CURRENT_USER);

if(user ==null)

return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());

return iShippingService.add(user.getId(),shipping);

}

Service层:

//新建收货地址

public ServerResponse add(Integer userId, Shipping shipping){

shipping.setUserId(userId);

int rowCount = shippingMapper.insert(shipping);

if(rowCount > 0){

Map result = Maps.newHashMap();

result.put("shippingId",shipping.getId());

return ServerResponse.createBySuccess("新建地址成功",result);

}

return ServerResponse.createByErrorMessage("新建地址失败");

}

Mapper.xml:

insert into mmall_shipping (id, user_id, receiver_name,

receiver_phone, receiver_mobile, receiver_province,

receiver_city, receiver_district, receiver_address,

receiver_zip, create_time, update_time

)

values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, #{receiverName,jdbcType=VARCHAR},

#{receiverPhone,jdbcType=VARCHAR}, #{receiverMobile,jdbcType=VARCHAR}, #{receiverProvince,jdbcType=VARCHAR},

#{receiverCity,jdbcType=VARCHAR}, #{receiverDistrict,jdbcType=VARCHAR}, #{receiverAddress,jdbcType=VARCHAR},

#{receiverZip,jdbcType=VARCHAR}, now(), now()

)

同步获取自增主键

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。

二、删除收货地址

Controller层:

@RequestMapping("del.do")

@ResponseBody

public ServerResponse del(HttpSession session,Integer shippingId){

User user = (User)session.getAttribute(Const.CURRENT_USER);

if(user ==null){

return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());

}

return iShippingService.del(user.getId(),shippingId);

}

Service层:

public ServerResponse del(Integer userId,Integer shippingId){

int resultCount = shippingMapper.deleteByShippingIdUserId(userId,shippingId);

if(resultCount > 0){

return ServerResponse.createBySuccess("删除地址成功");

}

return ServerResponse.createByErrorMessage("删除地址失败");

}

Mapper.xml:

DELETE FROM mmall_shipping

where id = #{shippingId}

and user_id = #{userId}

三、更新收货地址

Controller层:

@RequestMapping("update.do")

@ResponseBody

public ServerResponse update(HttpSession session,Shipping shipping){

User user = (User)session.getAttribute(Const.CURRENT_USER);

if(user ==null){

return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());

}

return iShippingService.update(user.getId(),shipping);

}

Service层:

public ServerResponse update(Integer userId, Shipping shipping){

shipping.setUserId(userId);

int rowCount = shippingMapper.updateByShipping(shipping);

if(rowCount > 0){

return ServerResponse.createBySuccess("更新地址成功");

}

return ServerResponse.createByErrorMessage("更新地址失败");

}

Mapper.xml:

update mmall_shipping

set

receiver_name = #{receiverName,jdbcType=VARCHAR},

receiver_phone = #{receiverPhone,jdbcType=VARCHAR},

receiver_mobile = #{receiverMobile,jdbcType=VARCHAR},

receiver_province = #{receiverProvince,jdbcType=VARCHAR},

receiver_city = #{receiverCity,jdbcType=VARCHAR},

receiver_district = #{receiverDistrict,jdbcType=VARCHAR},

receiver_address = #{receiverAddress,jdbcType=VARCHAR},

receiver_zip = #{receiverZip,jdbcType=VARCHAR},

create_time = #{createTime,jdbcType=TIMESTAMP},

update_time = now()

where id = #{id,jdbcType=INTEGER}

and user_id = #{userId,jdbcType=INTEGER}

SpringMVC绑定对象

CSpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性。

注意:pojo对象的属性名和表单中input的name属性一致

表单:

编号:

名称:

出厂时间:

备注:

处理器映射方法:

@RequestMapping(value={"/insertItem.action"})

public String insertItem(Model model,Item item){

return "itemList";

}

注意:提交的表单不要有日期类型的数据,否则会报错400,如果需要提交日期类型的数据,需要自定义参数绑定的内容

SpringMVC时间处理

1. 在控制器中使用@InitBind注解

@Controller

public class TestFileController {

@InitBinder

public void initBind(WebDataBinder binder){

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");

dateFormat.setLenient(false);

binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));

}

@RequestMapping("/doAdd")

public void doAdd(@ModelAttribute User user, HttpServletRequest request){

System.out.println(user.getName());

System.out.println(user.getBirthtime());

}

}

2. 在POJO中日期属性上添加@DateTimeFormat

public class User{

private String name;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")

private Date birthtime;

// 属性的setter/getter方法略

}

SpringMVC乱码解决

post中文乱码:

CharacterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

CharacterEncodingFilter

*.action

get中文乱码:

方法1:修改tomcat的server.xml

方式2:手动转码

new String(request.getParameter("id").getBytes("iso8859-1"), "utf-8");

四、查询收货地址列表

Controller层:

@RequestMapping("list.do")

@ResponseBody

public ServerResponse list(@RequestParam(value = "pageNum",defaultValue = "1") int pageNum,

@RequestParam(value = "pageSize",defaultValue = "10")int pageSize,

HttpSession session){

User user = (User)session.getAttribute(Const.CURRENT_USER);

if(user ==null){

return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());

}

return iShippingService.list(user.getId(),pageNum,pageSize);

}

Service层:

public ServerResponse list(Integer userId,int pageNum,int pageSize){

PageHelper.startPage(pageNum,pageSize);

List shippingList = shippingMapper.selectByUserId(userId);

PageInfo pageInfo = new PageInfo(shippingList);

return ServerResponse.createBySuccess(pageInfo);

}

Mapper.xml:

SELECT

from mmall_shipping

where user_id = #{userId}

Java面试的完整博客目录如下:Java笔试面试目录

java电商三级地址_Java电商项目面试--收货地址模块相关推荐

  1. 电商项目之收货地址理解

    1.收货地址增加(请求参数:HttpSession session,Shipping shipping) a.获取session中当前登陆用户 b.将用户id和地址进行关联,防止横向越权,没有用户id ...

  2. Django 19购物商城项目(收货地址:添加、修改)

    dDjango 19购物商城项目 1.新建axf_addr,收货地址表 2.路由 3.cart页面,添加默认收货地址 4.视图(主要修改了cart.新建了收货地址相关方法) 5.收货地址列表 6.收货 ...

  3. php 调用微信收货地址,php版微信自动获取收货地址api用法示例

    微信公众平台现在是越来越强大了,我们可以通过各种api接口来与平台对接获取对应的数据了,下面来看一个由php实现的微信自动获取收货地址api程序,具体如下. 关于接口的说明我就不介绍了,在官方可以看到 ...

  4. android 京东收货地址,手机京东商城怎么添加收货地址?

    想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...

  5. mysql收货地址表_企业内容管理系统-收货地址表 - 数据库设计 - 数据库表结构 - 果创云...

    -- 数据库大全:企业内容管理系统-收货地址表 -- 来源:YesApi.cn CREATE TABLE `yesapi_ey_shop_address` ( `id` bigint(20) unsi ...

  6. Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】

    文章目录 05-结算-收货地址-添加 06-结算-收货地址-修改 07-结算-提交订单 05-结算-收货地址-添加 目的:实现收货地址的添加. 大致步骤: 独立组件,准备一个对话框 完成表单布局 完成 ...

  7. 收货地址的JavaScript城市三级联动【干货拿走不谢!>_<】

    城市三级联动 在我们网上购物时会有收货地址一栏让我们选择收货地址,当中有省.市.区等选择项,如下图: 在添加收货地址时我们会先选择省再选市最后选所在区,这些都是下拉列表式的选择,选择完成才会填写具体地 ...

  8. uniapp 小程序获取微信收货地址

    引言 小程序商城中,不可避免会出现获取并添加微信的收货地址,根据现在小程序的规则实现获取微信收货地址 封装获取微信收货地址API // asyncWx.js/*** 获取用户收货地址 uni.choo ...

  9. 美多商城之用户中心(收货地址1)

    三.收货地址 用户地址的主要业务逻辑有: 展示省市区数据 用户地址的增删改查处理 设置默认地址 设置地址标题 3.1 省市区三级联动 1. 展示收货地址界面 提示: 省市区数据是在收货地址界面展示的, ...

  10. 微信小程序获取用户收货地址与指纹验证接口(安卓和iphone)

    @toc 1.获取用户收货地址接口wx.chooseAddress()   wx.chooseAddress(Object object)获取用户收货地址,此接口调用的是微信的收货地址.微信收货地址不 ...

最新文章

  1. 微信数据分析包准备(Python)
  2. 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
  3. Android Service Security
  4. 预热您的JVM –超快速生产服务器和IDE
  5. linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
  6. python字符串不可改变怎么理解_python的“不可变性”代表了什么?
  7. CCF201604-1 折点计数(100分)【序列处理】
  8. Java 类锁、对象锁、私有锁
  9. 银行排队问题之单队列多窗口服务 (25 分)(结构体排序)
  10. 迷途指针 new delete
  11. Java8新特性系列(序)
  12. 二进制、十进制和16进制对照表以及对应的字符
  13. java定时数据同步_java实现定时同步数据同步
  14. 计算机不联网会有ip地址吗,不联网的电脑有ip地址吗
  15. apm系统服务器,APM系统简单对比(zipkin,pinpoint和skywalking)
  16. C# 多线程造成CPU占用率高解决办法
  17. 基于NRF24L01的CAN数据透传
  18. echarts动态渲染柱状图背景颜色以及顶部数值
  19. QS2016年全球高等教育系统实力排名 中国排名世界第八亚洲第一
  20. 结果集没有当前行的解决方法

热门文章

  1. 丰收互联蓝牙key怎么开机_蓝牙UKEY使用说明
  2. FS68001电动牙刷无线充电IC
  3. Yii2 —— 表单美化
  4. 抽象代数的代码实现(1) 置换群
  5. 怎样绘制流程图?分享拼多多购物流程图模板及绘制技巧
  6. 如何导出久其报表所有数据_【久其报表数据管理系统怎么用】久其报表数据管理系统好不好_使用技巧-ZOL软件百科...
  7. 基于python的opc读写和导入MSSQL/MYSQL的KepOPC中间件
  8. XX银行数据中心建设方案
  9. SPDK/PMDK/VTune Amplifier 2019中国峰会顺利落幕
  10. selenium2 原理和常用api