DUMP3 企业级电商项目
【開發(fā)模式】controller - service(合法校驗(yàn)問題) - dao? ?反過來也沒問題??
?
用戶模塊
登錄 注冊 用戶名驗(yàn)證(實(shí)時(shí)反饋前端) 忘記密碼 重置密碼 退出登錄 更新用戶信息 獲取用戶信息 提交問題答案
【用戶實(shí)體設(shè)計(jì)】portal backend 以 role常量 區(qū)分(小技巧 常量可以用 interface 進(jìn)行分組)
??
【MD5不對稱加密 , 加 salt 值】MD5Util?
【高可用服務(wù)響應(yīng)對象】 統(tǒng)一接口設(shè)計(jì) status msg data
【?和 user_id 關(guān)聯(lián)的session】【登錄 session.setAttribute() 】【注銷 session.removeAttribute()】【獲取 session.getAttribute()】
?
安全:橫向越權(quán)(平級(jí)用戶訪問另一個(gè)平級(jí)用戶) 縱向越權(quán)(低級(jí)用戶訪問高級(jí)用戶)?
【提交問題答案】獲得token => 【忘記重置密碼】
1.guava 緩存 封裝一個(gè) TokenCache ,后期可以改成 redis? ??
2.token 降低了橫向越權(quán)的可能性
?
【檢查 email 是否合法】根據(jù)當(dāng)前session user_id,統(tǒng)計(jì)其他用戶 email = #{email} 。
select count(1) from user where email = #{newEmail} and id != #{userId}
【檢查舊的密碼】默認(rèn)要是當(dāng)前用戶 user_id = #{userId}
【更新用戶信息】user.setId(sessionUser.getId())? 降低越權(quán)。
?……………………………………………………………………………………………………………………
品類模塊
獲取節(jié)點(diǎn) 增加節(jié)點(diǎn) 修改名字 獲取分類ID 遞歸子節(jié)點(diǎn)ID?
?
無限層級(jí)樹狀數(shù)據(jù)結(jié)構(gòu) 遞歸
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;
}
?
復(fù)雜對象排重?equal > hashcode
……………………………………………………………………………………………………………………………………………………………………
商品模塊
商品列表 商品搜索 圖片上傳 富文本上傳 商品詳情 商品上下架 商品實(shí)體增刪改
?
【相關(guān) 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文件服務(wù)】 FTPUtil
?
【SpringMVC 文件上傳】配合 nginx + switchhost(域名轉(zhuǎn)發(fā)) + vsftpd - tomcat(8080) 來測試這個(gè)功能。
瀏覽器地址欄 =》Hosts www->ip =》nginx port 服務(wù)器localhost/服務(wù)器 ftp =》使用ftp上傳到vsftpd返回 nginx 地址。(nginx -> vsftpd文件資源文件夾)
【0】request.getSession.getServletContext.getRealPath("upload")獲得上傳路徑? ? ?/web-app/upload? ?這個(gè)web-app相當(dāng)于host/context-path這個(gè)位置。
【1】修改文件名 => UUID.random一個(gè)文件名。
【2】multiFilePart.transferTo(targetFile)? ?
【3】FTPUtil.upload
?
【富文本上傳】simditor ,要求返回這個(gè)插件所需要的 結(jié)構(gòu)體。
?
【流讀取properties配置文件 靜態(tài)塊】通過這種方法 支持熱部署。(最主要中心思想 一切皆對象 一切皆文件)
=》全局變量 常量 靜態(tài)變量 局部變量(方法內(nèi))?
【固有印象】提到全局我最先想到是配置文件、還有就是聲明在公開類里面的 public static final 變量。
【實(shí)例變量】是清晰的,明確要我們初始化類才有的。單純 public 的變量? =? ?non-static 變量 = 實(shí)例變量,所以大家愛說的全局變量說的是 public static 變量。
【結(jié)論】全局變量就是 public static? 強(qiáng)調(diào)類屬關(guān)系,所以初始化順序應(yīng)該最先一個(gè)。
=》因?yàn)槲覀円?tomcat 啟動(dòng)加載到 配置項(xiàng),全局變量 -> 靜態(tài)變量? -> 靜態(tài)塊 -> 普通代碼塊 -> 構(gòu)造器 -> 實(shí)例變量??
=》靜態(tài)塊有且僅執(zhí)行1次,最后可以實(shí)現(xiàn) 一個(gè) PropertiesUtil 負(fù)責(zé)加載配置項(xiàng)工具。
?
【抽象 pojo? bo vo 之間轉(zhuǎn)換思路? ? ?】
1期 pojo valueobject 2期 pojo businessobject viewobject
這種轉(zhuǎn)換的意思是,把 pojo assemble 成所需要的一種對象,vo 。(assemble 增加一些返回字段 裝載原來的pojo)
?
【joda-time專業(yè)庫】自己封裝一個(gè) DateTimeUtil
DateTime DateTimeFormat DateTimeFormatter 實(shí)現(xiàn) 字符串到Date的轉(zhuǎn)換。
?
【Mybatis-PageHelper 分頁】原理AOP。使用文檔
其中一種使用方法//??use static method startPage
PageHelper.startPage(pageNum,pageSize)
// Mapper? ?查詢 sql
PageInfo 使用 查詢結(jié)果初始化。
?
實(shí)現(xiàn)方式
1. 使用 list 接口 subList(int startIndex,int endIndex);
2. 直接使用數(shù)據(jù)庫 sql 語句 【mysql:limit offset,length】select * from t_student limit 0,10??
3. hibernate 框架? Criteria 設(shè)置 firstResult , maxResult? ? ? 【復(fù)雜查詢轉(zhuǎn)成的SQL性能差】
4. mybatis 使用 sql 語句。
【Mybatis-PageHelper 動(dòng)態(tài)排序】約定 product_asc? product_desc? ,實(shí)體_下劃_排序 。
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);注意點(diǎn):1. 使用 page(AOP監(jiān)聽生成) 去初始化PageInfo。 2. 根據(jù)需要修改成實(shí)際需要返回的裝配數(shù)據(jù)
?
【Mybatis對where動(dòng)態(tài)拼裝】
<where>去除無用的 “and”
?
轉(zhuǎn)載于:https://www.cnblogs.com/chenhui7373/p/9169334.html
總結(jié)
以上是生活随笔為你收集整理的DUMP3 企业级电商项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: get请求中文乱码问题
- 下一篇: 李嘉诚语录_1