【开发模式】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="10485760"/> <!-- 10m --><property name="maxInMemorySize" value="4096" /><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[0]+" "+orderArr[1]);}}

        PageInfo pageInfo = new PageInfo(productList);pageInfo.setList(productListVOList);return ServerResponse.createBySuccess(pageInfo);

注意点:1. 使用 page(AOP监听生成) 去初始化PageInfo。 2. 根据需要修改成实际需要返回的装配数据

【Mybatis对where动态拼装】

<where>去除无用的 “and”

转载于:https://www.cnblogs.com/chenhui7373/p/9169334.html

DUMP3 企业级电商项目相关推荐

  1. Java从零打造企业级电商项目实战 项目初始化

    1.项目初始化 1.1 新建maven项目 (1)new project -> maven -> maven-archetype-webapp project name:mmall pro ...

  2. DUMP1 企业级电商项目

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

  3. Java从零到企业级电商项目实战: linux环境配置

    阿里云镜像 https://opsx.alibaba.com/mirror https://blog.csdn.net/jameshadoop/article/details/54881295(修改y ...

  4. 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目

    简介: 技术架构 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目,从项目中台架构技术选型.模块设计.基础设施的构建.分布式解决方 案.互联 ...

  5. 新零售微服务电商项目SpringBoot/SpringCloudAlibaba

    技术架构–项目地址-新零售微服务电商项目 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目,从项目中台架构技术选型.模块设计.基础设施的构建 ...

  6. 电商项目相关面试问题及答案

    请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |–系统背景及系统概述 |–系统包括的业务模块及主业务流程 |–责任模块 [回答示例] 第一个方面:系统背景及系统概述 优购时尚商城是香 ...

  7. JavaEE大型分布式电商项目 上海淘淘商城 29期

    上海29期_张志君老师_淘淘商城_大型分布式电商项目 JavaEE大型分布式电商项目 淘淘商城 29期 需要的加qq:350226234,备注:程序员学习视频 ==================== ...

  8. 电商项目中的经典问题

    转载自:https://blog.csdn.net/A_BlackMoon/article/details/80094814 请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |--系统 ...

  9. 视频教程-企业级电商大数据推荐系统实战-大数据

    企业级电商大数据推荐系统实战 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业.拥有丰富的企业应 ...

最新文章

  1. leetcode--罗马数字转整数--python
  2. python中raw_input未定义_python之NameError: name 'raw_input' is not defined
  3. 很是迷茫 ERP和HIS哪个更有发展前途?
  4. 第三次学JAVA再学不好就吃翔(part95)--Collections工具类
  5. 龙芯团队 在移值 MIPS64 下的.NET Core 进度速报
  6. matlab里输出恒压的逆变器,基于IGBT逆变器的异步电机变频调速系统的MATLAB仿真...
  7. Qt文档阅读笔记-Qt工作笔记-QTableWidget::selectedItems()官方解析与实例(如何进行多选)
  8. UI调试--初步尝试心得总结
  9. MySQL数据库的设计和命令行模式下建立详细过程
  10. 遇到bug我会怎么做
  11. JavaSE基础——Java多线程
  12. Visual Studio 2010添加新项缺失[ADO.NET 实体数据模型]解决方法
  13. 用python编程 商品打折怎么计算_折扣怎么算用计算公式
  14. 深挖Openstack Nova - evacuate疏散函数
  15. 聚类分析(K-means、系统聚类和二阶聚类)的原理、实例及在SPSS中的实现(一)
  16. 计算机分级时无法度量视频播放,无法度量视频播放性能怎么办-无法度量视频播放性能的解决方法 - 河东软件园...
  17. 简单爬取红牛分公司基本数据part01
  18. Endnote将文献插入在指定位置
  19. 快速排序--QuickSort()--递归版本
  20. 路由器在接一个路由器设置方法

热门文章

  1. mysql中文查询问题
  2. 第一章:Flask安装
  3. UVALive 7040 Color
  4. int ,long , long long类型的范围
  5. java.util.Queue用法
  6. 摩托罗拉指控苹果iPhone 4S和iCloud侵犯6项专利
  7. “该文件包含不能在当前代码页(936)中表示的字符,请将该文件保存为 Unicode 格式以防止数据丢失”
  8. 三通道阈值化最好不要使用img_h<0>0.15img_v>0.25的写法~
  9. oracle 00966,oracle错误代码一览表
  10. java封装省市区三级json格式,2016中国省市区三级联动json格式.pdf