項目知識點:
1.@RequestBody--對應實體類封裝和@RequestParam
2.mybatis中example的使用
3.下拉框可以多選使用select2-發(fā)發(fā)權限中有講到,select2當中數據格式 ?就是下面的data
$scope.brandList={data:[{id:1,text:'聯想'},{id:2,text:'華為'},{id:3,text:'小米'}]}
4.ng-options屬性可以在表達式中使用數組或對象來自動生成一個select中的option列表。ng-options與ng-repeat很相似,很多時候可以用ng-repeat來代替ng-options。但是ng-options提供了一些好處,例如減少內存提高速度,以及提供選擇框的選項來讓用戶選擇。
5.json傳數據:對象,數組對象
6.JSON方法總結:
1)@JSONField(name="DATE OF BIRTH",?format="dd/MM/yyyy",?ordinal =?3)
private?Date?dateOfBirth;
注意:FastJson 在進行操作時,是根據 getter 和 setter 的方法進行的,并不是依據 Field 進行。
注意:若屬性是私有的,必須有set 方法。否則無法反序列化。
2)fastjson提供了toJSONString() 和 parseObject() 方法來將 Java 對象與 JSON 相互轉換。調用toJSONString方 法即可將對象轉換成 JSON 字符串,parseObject 方法則反過來將 JSON 字符串轉換成對象。
注意反序列化時為對象時,必須要有默認無參的構造函數,否則會報異常。
3)某些場景下,對Value做過濾,需要獲得所屬JavaBean的信息,包括類型、字段、方法等。在fastjson-1.2.9中,提供了ContextValueFilter,類似于之前版本提供的ValueFilter,只是多了BeanContext參數可用。
JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
JSONObject jsonObject = JSON.parseObject(COMPLEX_JSON_STR);
JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
將集合轉化為map
List<Map> imageList = JSON.parseArray(goods.getGoodsDesc().getItemImages(),Map.class);
parseObject直接默認是Map?別的要指定 Map.class
7.http://localhost:9102/admin/goods_edit.html#?id=149187842867969?
注意:?前要加# ,則是angularJS的地址路由的書寫形式
$location ----var?id= $location.search()['id'];//獲取參數值
8.useGeneratedKeys要求數據庫本身具備主鍵自動增長的功能,比如說,mysql,sqlserver可以使用useGeneratedKeys =true 這功能,不支持主鍵自動增長的數據庫是不能使用useGeneratedKeys =true的
不支持的用selectKey子節(jié)點來做,oracle不支持useGeneratedKeys,否則會報“不支持的特性”
9.xsd或者dtd文件有問題 ?復制那個url打開瀏覽器,然后網頁另存為導入即可!
10.Long.valueOf(這里有參數),是將參數轉換成long的包裝類——Long。
longValue()是Long類的一個方法,用來得到Long類中的數值。
前者是將基本數據類型轉換成包裝類后者是將包裝類中的數據拆箱成基本數據類型
項目中常用思想:
1.將常用的操作封裝在baseController.jsr中,
比如分頁,批量刪除時對數組的操作,獲取JSON字符串中的某個key對應值的集合--規(guī)格:內存、網絡,從集合中查詢某個名稱的值是否存在
2.添加和修改的時候,可以進行合并--后端或者前端操作 ?但是也要看情況
3.增刪改都要對結果進行封裝提示
封裝一個Result結果類? boolean? string
4.頁面?zhèn)鬟^來的是一對多的數據,用對象封裝,比如規(guī)格和規(guī)格選項
保存提交:
實現思路:我們將規(guī)格和規(guī)格選項數據合并成一個對象來傳遞,這時我們需要用一個對象將這兩個對象組合起來。在業(yè)務邏輯中,得到組合對象中的規(guī)格和規(guī)格選項列表,插入規(guī)格返回規(guī)格ID,然后循環(huán)插入規(guī)格選項。
這里使用到了last_insert_id(),是mysql的函數
5.修改的時候先刪除再添加,刪除的時候也要刪除關聯的:先刪除規(guī)格,再添加條件id,會刪除相應的規(guī)格選項中所有帶這個id 的
6.springsecurity使用要先放行靜態(tài)頁面? img js css等,賬號密碼可以直接在配置文件中配置,也可以從數據中獲取
/* 代表的是根路徑下的所有資源(不包含子路徑)?/**代表的是根路徑下所有的資源(包含子路徑)
要把add.do放行,不然商家永遠注冊不了,一直都會重定向到注冊頁面,發(fā)生錯誤
BCrypt算法將salt隨機并混入最終加密后的密碼,驗證時也無需單獨提供之前的salt,從而無需單獨處理salt問題。不用再另外加鹽
后臺管理系統(tǒng)用權限框架,前臺門戶網站用sso ?cas策略單點登錄
always-use-default-target:指定了是否在身份驗證通過后總是跳轉到default-target-url屬性指定的URL。這樣不會跳轉到之前輸入的url中,前臺門戶網站可以跳轉到自己輸入的,后臺應該指定默認
7.商家系統(tǒng)登陸與安全控制,商家賬號來自數據庫,并實現密碼加密
進行校驗時,只需要先傳入username,然后去數據庫查出,再根據這個正確的密碼去校對,由于在form表單中指定了password,框架會自動匹配。
8.面包屑的使用一級分類,二級分類,三級分類??每次點擊傳入findByparentId(entity.id)
9.添加商品這個信息比較多,建議另外跳轉頁面進行處理,少量信息可以采用彈出模態(tài)框!
10.Kingeditor的使用:還有引入JS的時候順序問題也很重要,要先加載哪一個
11.對于fastdfs上面的圖片也可能會有很多垃圾存在,可以采用springtask進行每天凌晨定時清理無用的圖片
12.我們?yōu)樯唐饭芾硖峁┥唐穭h除功能,用戶選中部分商品,點擊刪除按鈕即可實現商品刪除。注意,這里的刪除并非是物理刪除,而是修改tb_goods表的is_delete字段為1 ,我們可以稱之為“邏輯刪除”
13.廣告緩存-redis
現在我們首頁的廣告每次都是從數據庫讀取,這樣當網站訪問量達到高峰時段,對數據庫壓力很大,并且影響執(zhí)行效率。我們需要將這部分廣告數據緩存起來。
使用:findByCategoryId
先從緩存中查詢,如果值為空,則從數據庫查詢,并放入緩存即可
當廣告數據發(fā)生變更時,需要將緩存數據清除,這樣再次查詢才能獲取最新的數據
14.搜索方案--solr
復制域的作用在于將某一個Field中的數據復制到另一個域中
當我們需要動態(tài)擴充字段時,我們需要使用動態(tài)域。對于品優(yōu)購,規(guī)格的值是不確定的,所以我們需要使用動態(tài)域來實現。需要實現的效果如下:? 然后只需要在實體類中加上@Field注解
15.solr服務器地址中:如果數據索引庫不止一個,要指定數據庫,并且還要修改core.properties
16.按價格區(qū)間搜索方案:0和上限要區(qū)別處理
17單點登錄可以理解為游樂園的通票!
在一處地方登錄后,別的地方需要登錄的時候不需要登錄分布式
18.當用戶在未登錄的情況下,將此購物車存入cookies ,在用戶登陸的情況下,將購物車數據存入redis ?。如果用戶登陸時,cookies中存在購物車,需要將cookies的購物車合并到redis中存儲.
19.跳板頁
20.判斷的時候有時候可能從某處get得到的不會是null,但是時一個空的集合,所以要加上別的判斷:cartList_cookie.size()>0
21.狀態(tài)顯示:
1)用if ?麻煩
2)用一個數組存取狀態(tài)status[未審核,已審核,不通過,通過],然后status[0/1]
22.修改商品:如果修改的東西比較多,就不用彈窗
23.使用三目元算符做判斷