java电商三级地址_Java电商项目面试--收货地址模块
收货地址模块技术要点:
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.收货地址增加(请求参数:HttpSession session,Shipping shipping) a.获取session中当前登陆用户 b.将用户id和地址进行关联,防止横向越权,没有用户id ...
- Django 19购物商城项目(收货地址:添加、修改)
dDjango 19购物商城项目 1.新建axf_addr,收货地址表 2.路由 3.cart页面,添加默认收货地址 4.视图(主要修改了cart.新建了收货地址相关方法) 5.收货地址列表 6.收货 ...
- php 调用微信收货地址,php版微信自动获取收货地址api用法示例
微信公众平台现在是越来越强大了,我们可以通过各种api接口来与平台对接获取对应的数据了,下面来看一个由php实现的微信自动获取收货地址api程序,具体如下. 关于接口的说明我就不介绍了,在官方可以看到 ...
- android 京东收货地址,手机京东商城怎么添加收货地址?
想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...
- mysql收货地址表_企业内容管理系统-收货地址表 - 数据库设计 - 数据库表结构 - 果创云...
-- 数据库大全:企业内容管理系统-收货地址表 -- 来源:YesApi.cn CREATE TABLE `yesapi_ey_shop_address` ( `id` bigint(20) unsi ...
- Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】
文章目录 05-结算-收货地址-添加 06-结算-收货地址-修改 07-结算-提交订单 05-结算-收货地址-添加 目的:实现收货地址的添加. 大致步骤: 独立组件,准备一个对话框 完成表单布局 完成 ...
- 收货地址的JavaScript城市三级联动【干货拿走不谢!>_<】
城市三级联动 在我们网上购物时会有收货地址一栏让我们选择收货地址,当中有省.市.区等选择项,如下图: 在添加收货地址时我们会先选择省再选市最后选所在区,这些都是下拉列表式的选择,选择完成才会填写具体地 ...
- uniapp 小程序获取微信收货地址
引言 小程序商城中,不可避免会出现获取并添加微信的收货地址,根据现在小程序的规则实现获取微信收货地址 封装获取微信收货地址API // asyncWx.js/*** 获取用户收货地址 uni.choo ...
- 美多商城之用户中心(收货地址1)
三.收货地址 用户地址的主要业务逻辑有: 展示省市区数据 用户地址的增删改查处理 设置默认地址 设置地址标题 3.1 省市区三级联动 1. 展示收货地址界面 提示: 省市区数据是在收货地址界面展示的, ...
- 微信小程序获取用户收货地址与指纹验证接口(安卓和iphone)
@toc 1.获取用户收货地址接口wx.chooseAddress() wx.chooseAddress(Object object)获取用户收货地址,此接口调用的是微信的收货地址.微信收货地址不 ...
最新文章
- 微信数据分析包准备(Python)
- 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
- Android Service Security
- 预热您的JVM –超快速生产服务器和IDE
- linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
- python字符串不可改变怎么理解_python的“不可变性”代表了什么?
- CCF201604-1 折点计数(100分)【序列处理】
- Java 类锁、对象锁、私有锁
- 银行排队问题之单队列多窗口服务 (25 分)(结构体排序)
- 迷途指针 new delete
- Java8新特性系列(序)
- 二进制、十进制和16进制对照表以及对应的字符
- java定时数据同步_java实现定时同步数据同步
- 计算机不联网会有ip地址吗,不联网的电脑有ip地址吗
- apm系统服务器,APM系统简单对比(zipkin,pinpoint和skywalking)
- C# 多线程造成CPU占用率高解决办法
- 基于NRF24L01的CAN数据透传
- echarts动态渲染柱状图背景颜色以及顶部数值
- QS2016年全球高等教育系统实力排名 中国排名世界第八亚洲第一
- 结果集没有当前行的解决方法
热门文章
- 丰收互联蓝牙key怎么开机_蓝牙UKEY使用说明
- FS68001电动牙刷无线充电IC
- Yii2 —— 表单美化
- 抽象代数的代码实现(1) 置换群
- 怎样绘制流程图?分享拼多多购物流程图模板及绘制技巧
- 如何导出久其报表所有数据_【久其报表数据管理系统怎么用】久其报表数据管理系统好不好_使用技巧-ZOL软件百科...
- 基于python的opc读写和导入MSSQL/MYSQL的KepOPC中间件
- XX银行数据中心建设方案
- SPDK/PMDK/VTune Amplifier 2019中国峰会顺利落幕
- selenium2 原理和常用api