複習電商筆記-10
原因:
ItemCat.java POJO檔案中為EasyUI.tree增加了屬性,而資料庫表中沒有此欄位,所以引起,json串轉換成java時報錯。
解決辦法:
在類上增加忽略不能識別的屬性標識。
@Table(name="tb_item_cat") //類和表的對映
@JsonIgnoreProperties(ignoreUnknown = true) //忽略掉不認識的屬性
public class ItemCat extends BasePojo{
點選樹節點後,怎麼會再次發起請求呢?
延遲載入(非同步載入),點選樹節點,去查詢其子節點資訊,然後載入到樹上。這樣當資料量非常大時,效率高,多餘的節點資訊可以無需載入。
但實現程式碼我們並沒有寫,EasyUI.Tree元件內部已經直接實現了。
如何知道哪個節點是樹幹,哪個是葉子節點呢?
它在js載入每個node時有個state屬性,open/closed。通過它來區分。
${“ul”,_win}.tree是什麼意思?
這是jQuery的語法,${“ul”}代表整個文件中查詢ul元素;${“ul”,_win}代表在區域_win中查詢ul元素。實現更小範圍的查詢,不會把其他地方不需要的ul也找出來。
商品表設計
商品表
主鍵設計
int>bigint>char>varchar
索引設計
- 主鍵有沒有索引,只要建立主鍵,資料庫就會自動建立索引。
- 什麼欄位才建立索引,where條件中頻繁出現的欄位,在orderby中頻繁出現的欄位。
- 能不能所有的欄位建立索引,索引也是“表”。索引不是建立的越多越好,它也好佔磁碟空間。
- 索引為什麼快?a.欄位少,b.排序(重點)
為什麼能夠提高查詢速度?
索引就是通過事先排好序,從而在查詢時可以應用二分查詢等高效率的演算法。
一般的順序查詢,複雜度為O(n),而二分查詢複雜度為O(log2n)。當n很大時,二者的效率相差及其懸殊。
如果a的x次方等於N(a>0,且a不等於1),那麼數x叫做以a為底N的對數(logarithm),記作x=logaN。其中,a叫做對數的底數,N叫做真數。
指數:https://baike.baidu.com/item/%E5%AF%B9%E6%95%B0/91326?fr=aladdin
商品列表
MyBatis攔截器
MyBatis 使用動態代理來增強程式程式碼,實現攔截器功能。它允許在已對映語句執行過程中的某一點進行攔截呼叫。預設情況下,MyBatis 允許使用外掛來攔截的方法呼叫包括:
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed),delete和insert會呼叫update方法。
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
- StatementHandler (prepare, parameterize, batch, update, query)
通過攔截ResultSetHandler修改介面返回型別;
通過攔截StatementHandler修改mybatis框架的分頁機制;
通過攔截Executor檢視mybatis的sql執行過程等等。
MyBatis攔截器比較簡單,只有三個方法:intercept、plugin、setProperties
@Intercepts({@Signature(
type= Executor.class,
method = "update",
args = {MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
public Object intercept(Invocation invocation) throws Throwable {
return invocation.proceed();
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
}
}