【开发模式】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 企业级电商项目的更多相关文章

  1. Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  2. Java从零到企业级电商项目实战

    欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回复关键字免费领取)回复关键字:"电商项 ...

  3. DUMP3.5 企业级电商项目

    购物车模块 加入商品 更新商品数 查询商品数 移除商品 单选/取消 全选/取消  购物车列表 [浮点型商业运算精度丢失问题]ej1st 一书提到 float double只适合科研计算,BigDeci ...

  4. DUMP 5 企业级电商项目

    [订单模块] 创建订单 商品信息  订单列表  订单详情 取消订单 订单列表  订单搜素  订单详情  订单发货 [创建订单]  购物车勾选商品 涉及 Cart Product  => 一个商品 ...

  5. DUMP 3.8 企业级电商项目 支付宝之类

    ① 沙箱登录:https://openhome.alipay.com/platform/appDaily.htm 获得一个 使用环境描述 APPID.授权回调地址.沙箱钱包哪里下载之类的 ② 沙箱环境 ...

  6. DUMP4 企业级电商项目 —— 对接支付宝扫码支付

    延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...

  7. DUMP2 企业级电商项目

    正常设计数据库表,按照数据流向. ~~闭环核心业务 [1用户]登录 =>浏览[2分类]+浏览[3商品]=>加入[4购物车]=>结算[5订单]+[6收货地址]=>[7支付] [购 ...

  8. DUMP1 企业级电商项目

    系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...

  9. 从0到上线开发企业级电商项目_前端_01_sublime使用技巧

    一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...

随机推荐

  1. Redis操作hash

    来自:http://www.cnblogs.com/alex3714/articles/6217453.html Hash操作 hash表现形式上有些像pyhton中的dict,可以存储一组关联性较强 ...

  2. linux环境下快速安装Mariadb和Redis

    一 Mariadb(Mysql)篇 1.新建一个yum源仓库 touch /etc/yum.repos.d/Mariadb.repo 2.在这个yum源仓库文件中,添加仓库url地址 [mariadb ...

  3. .NET CORE学习笔记系列(4)——ASP.NET CORE 程序启用SSL

    一.什么是SSL? 1.概念: SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数 ...

  4. 利用XShell上传、下载文件(使用sz与rz命令)

    XSHELL工具上传文件到Linux以及下载文件到本地(Windows)   Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你 ...

  5. Django-CRM项目学习(三)-stark的页面展示

    开始今日份整理,主要为stark组件的增删改以及model_form组件的使用以及form组件的回顾 1.list_display_link功能 功能:客制化字段进行跳转到指定的页面(编辑页面) 1. ...

  6. yafu安装使用方法以及mismatched parens解决方法

    yafu用于自动整数因式分解,在RSA中,当p.q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p.q值,原理是使用Fermat方法与Pollard rho方法等. 再摘录官方的一 ...

  7. python中打印中文

    python中打印中文 在python 2.x版本中,默认是ASCII编码方式,在有业务需要输入中文时,就会出现乱码的情况.解决这种问题的一个方式就是设置py文件的编码方式.实现方式如下: 在py文件 ...

  8. python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  9. JQuery 选择某个td中第二个a标签 控制特殊样式

    a标签没有disabled属性,那么当我们想禁用a标签的点击事件的时候按照下面方法设置. 下面是html代码: <a id="entry” class="entry" ...

  10. JQ——利用一个开关,点击一个按钮完成展开收起功能

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...