DUMP3 企业级电商项目
【开发模式】controller - service(合法校验问题) - dao 反过来也没问题
用户模块
登录 注册 用户名验证(实时反馈前端) 忘记密码 重置密码 退出登录 更新用户信息 获取用户信息 提交问题答案
【用户实体设计】portal backend 以 role常量 区分(小技巧 常量可以用 interface 进行分组)
【MD5不对称加密 , 加 salt 值】MD5Util
【高可用服务响应对象】 统一接口设计 status msg data
【 和 user_id 关联的session】【登录 session.setAttribute() 】【注销 session.removeAttribute()】【获取 session.getAttribute()】
安全:横向越权(平级用户访问另一个平级用户) 纵向越权(低级用户访问高级用户)
【提交问题答案】获得token => 【忘记重置密码】
1.guava 缓存 封装一个 TokenCache ,后期可以改成 redis
2.token 降低了横向越权的可能性
【检查 email 是否合法】根据当前session user_id,统计其他用户 email = #{email} 。
select count(1) from user where email = #{newEmail} and id != #{userId}
【检查旧的密码】默认要是当前用户 user_id = #{userId}
【更新用户信息】user.setId(sessionUser.getId()) 降低越权。
……………………………………………………………………………………………………………………
品类模块
获取节点 增加节点 修改名字 获取分类ID 递归子节点ID
无限层级树状数据结构 递归
function recursiveSearch(categorySets,categoryId){
Category identify = categoryMapper.selectByPK(categoryId);
if( identify != null){
categorySets.add(identify);
}
List<Category> categoryList = categoryMapper.selectByParent(categoryId);
for(category:categoryList){
recursiveSearch(categorySets,category.getId());
}
return categorySets;
}
复杂对象排重 equal > hashcode
……………………………………………………………………………………………………………………………………………………………………
商品模块
商品列表 商品搜索 图片上传 富文本上传 商品详情 商品上下架 商品实体增删改
【相关 dispatcher-servlet.xml配置】
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value=""/> <!-- 10m -->
<property name="maxInMemorySize" value="" />
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
【FTP文件服务】 FTPUtil
【SpringMVC 文件上传】配合 nginx + switchhost(域名转发) + vsftpd - tomcat(8080) 来测试这个功能。
浏览器地址栏 =》Hosts www->ip =》nginx port 服务器localhost/服务器 ftp =》使用ftp上传到vsftpd返回 nginx 地址。(nginx -> vsftpd文件资源文件夹)
【0】request.getSession.getServletContext.getRealPath("upload")获得上传路径 /web-app/upload 这个web-app相当于host/context-path这个位置。
【1】修改文件名 => UUID.random一个文件名。
【2】multiFilePart.transferTo(targetFile)
【3】FTPUtil.upload
【富文本上传】simditor ,要求返回这个插件所需要的 结构体。
【流读取properties配置文件 静态块】通过这种方法 支持热部署。(最主要中心思想 一切皆对象 一切皆文件)
=》全局变量 常量 静态变量 局部变量(方法内)
【固有印象】提到全局我最先想到是配置文件、还有就是声明在公开类里面的 public static final 变量。
【实例变量】是清晰的,明确要我们初始化类才有的。单纯 public 的变量 = non-static 变量 = 实例变量,所以大家爱说的全局变量说的是 public static 变量。
【结论】全局变量就是 public static 强调类属关系,所以初始化顺序应该最先一个。
=》因为我们要在 tomcat 启动加载到 配置项,全局变量 -> 静态变量 -> 静态块 -> 普通代码块 -> 构造器 -> 实例变量
=》静态块有且仅执行1次,最后可以实现 一个 PropertiesUtil 负责加载配置项工具。
【抽象 pojo bo vo 之间转换思路 】
1期 pojo valueobject 2期 pojo businessobject viewobject
这种转换的意思是,把 pojo assemble 成所需要的一种对象,vo 。(assemble 增加一些返回字段 装载原来的pojo)
【joda-time专业库】自己封装一个 DateTimeUtil
DateTime DateTimeFormat DateTimeFormatter 实现 字符串到Date的转换。
【Mybatis-PageHelper 分页】原理AOP。使用文档
其中一种使用方法// use static method startPage
PageHelper.startPage(pageNum,pageSize)
// Mapper 查询 sql
PageInfo 使用 查询结果初始化。
实现方式
1. 使用 list 接口 subList(int startIndex,int endIndex);
2. 直接使用数据库 sql 语句 【mysql:limit offset,length】select * from t_student limit 0,10
3. hibernate 框架 Criteria 设置 firstResult , maxResult 【复杂查询转成的SQL性能差】
4. mybatis 使用 sql 语句。
【Mybatis-PageHelper 动态排序】约定 product_asc product_desc ,实体_下划_排序 。
if(StringUtils.isNotBlank(orderBy)){
if (Const.ProductListOrderby.PRICE_ASC_DESC.contains(orderBy)){
String[] orderArr = orderBy.split("_");
PageHelper.orderBy(orderArr[]+" "+orderArr[]);////////////////////////////////////////////
}
}
PageInfo pageInfo = new PageInfo(productList);
pageInfo.setList(productListVOList);
return ServerResponse.createBySuccess(pageInfo);
注意点:1. 使用 page(AOP监听生成) 去初始化PageInfo。 2. 根据需要修改成实际需要返回的装配数据
【Mybatis对where动态拼装】
<where>去除无用的 “and”
DUMP3 企业级电商项目的更多相关文章
- Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- Java从零到企业级电商项目实战
欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回复关键字免费领取)回复关键字:"电商项 ...
- DUMP3.5 企业级电商项目
购物车模块 加入商品 更新商品数 查询商品数 移除商品 单选/取消 全选/取消 购物车列表 [浮点型商业运算精度丢失问题]ej1st 一书提到 float double只适合科研计算,BigDeci ...
- DUMP 5 企业级电商项目
[订单模块] 创建订单 商品信息 订单列表 订单详情 取消订单 订单列表 订单搜素 订单详情 订单发货 [创建订单] 购物车勾选商品 涉及 Cart Product => 一个商品 ...
- DUMP 3.8 企业级电商项目 支付宝之类
① 沙箱登录:https://openhome.alipay.com/platform/appDaily.htm 获得一个 使用环境描述 APPID.授权回调地址.沙箱钱包哪里下载之类的 ② 沙箱环境 ...
- DUMP4 企业级电商项目 —— 对接支付宝扫码支付
延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...
- DUMP2 企业级电商项目
正常设计数据库表,按照数据流向. ~~闭环核心业务 [1用户]登录 =>浏览[2分类]+浏览[3商品]=>加入[4购物车]=>结算[5订单]+[6收货地址]=>[7支付] [购 ...
- DUMP1 企业级电商项目
系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...
- 从0到上线开发企业级电商项目_前端_01_sublime使用技巧
一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...
随机推荐
- mysql创建唯一索引,避免数据重复插入
多台服务器使用一个数据库时,有时就会出现重复插入的情况,eg:people表中的姓名和身份证号 此时可以给姓名和身份证号创建唯一索引, 创建语句:alter table people add uniq ...
- Vue项目分环境打包的实现步骤
转:https://blog.csdn.net/xinzi11243094/article/details/80521878 方法一:亲测真的有效 在项目开发中,我们的项目一般分为开发版.测试版.Pr ...
- Elastic Stack初篇-Logstash
一.Logstash简介 Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地. 二.Log ...
- .Net Core应用框架Util介绍(一)
距离上次发文,已经过去了三年半,这几年技术更新节奏异常迅猛,.Net进入了跨平台时代,前端也被革命性的颠覆. 回顾 2015年,正当我还沉迷于JQuery + EasyUi的封装时,突然意识到技术已经 ...
- day02(编程语言,解释器,环境变量,执行方式,pycharm,pip,变量三大组成)
上节课复习: 重点: 1,进制转换:二进制与十六进制 2,内存分布:栈区 与 堆区 10101001110111 => 2a77 abf1 => 1010101111110001 计算 ...
- mybatis 使用接口绑定
使用selectList,selectOne..的缺陷 刚开始学习mybatis的时候,使用selectList或者selectOne,传入要调用的mapper,如果又参数要传递的话,就需要将参数进行 ...
- 【ubuntu】修改php-fpm和nginx运行用户
(php)项目a是用test用户运行nginx和php-fpm是www-data用户运行(python)项目b是用test用户运行 项目a通过php函数exec调用python脚本的接口造成了没有权限 ...
- DAY10、函数的参数
一.实参:为形参传递值 调用函数时,实参可以由常量,变量,表达式三种的组合 1.位置实参:必须按照位置的顺序,从左到右为形参传递值 fn1(10, 20, 30) fn1(30, 20, 10) 2. ...
- mysql-笔记--增删改查
查看数据库:可以使用 show databases; 命令查看已经创建了哪些数据库 指定数据库:在登录后使用 use 语句指定, 命令: use 数据库名;要对一个数据库进行操作, 必须先选择该数据库 ...
- Magento 2 Error: A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.
有时在Magento上进行调试会很烦人,特别是如果出现了一些问题,而不是在你实际编写代码时. 这是Magento管理面板上发生的事情.截至目前,它可能是三个原因之一,让我们讨论一下: 1.管理员密码 ...