spring原始碼分析-SpringJdbc設計原理
阿新 • • 發佈:2019-01-09
1.簡介Spring Jdbc也遵循了簡單開發的原則,使用了模板模式,替我們完成所有使用JDBC API進行開發的單調乏味的、底層細節處理工作,而我們只需要補充一些spring沒做的事就可以了,下表描述了哪些是spring幫助我們做好的,哪些是我們要做的。2.有哪些模板呢?JdbcTemplate:Spring裡最基本的JDBC模板,利用JDBC和簡單的索引引數查詢提供對資料庫的簡單訪問。NamedParameterJdbcTemplate:能夠在執行查詢時把值繫結到SQL裡的命名引數,而不是使用索引引數。SimpleJdbcTemplate:利用Java 5 的特性,比如自動裝箱、通用(generic)和可變引數類表來簡化JDBC模板的使用。3.基於spring jdbc進行二次開發 Hibernate優點1、API豐富,可以實現無SQL操作(HQL),為了相容所有資料庫(都會先解釋為HQL)再由HQL翻譯成SQL(當然,有支援直接執行SQL的API,為了考慮使用者需求複雜性)對所有資料庫方言都支援得非常不錯2、ORM全自動化MyBatis優點1、輕量級,效能好2、SQL和Java程式碼分離(SqlMap,把每一條SQL語句起一名字,作為Map的key儲存)get("selectByName")缺點Hibernate過於複雜,什麼臨時態、持久態、刪除態、遊離態,OneToOne OneToMany ManyToManyMyBatis對於sql語句的編寫工作量較大簡化,spring推出的jdbc在於簡化,使用JdbcTemplate自己寫去因此我們集合了兩者的優點進行spring jdbc的二次開發第一,效能要好,是啥就是啥,不經過二次處理(不對SQL語句進行二次包裝)第二,單表操作實現NoSQL(只要用JDBC,SQL是不能省,只不過這拼接SQL的過程不要使用者自己寫了由程式自動生成,最終生成的是一個字串)第三,ORM零配置實現自動化(利用反射機制,把欄位和屬性對應上,然後,自動例項化返回結果)原則:約定優於配置(保證程式碼健壯性) DAO原則:一個Dao只操作一張表約定:做修改和刪除的是根據主鍵來操作的約定:儘量使用單表操作,如果實在要多表操作,可以先把資料查出來放到記憶體,然後在記憶體中進行計算約定:支援讀寫分離約定:支援分庫分表約定:ORM支援的型別原則上只認Java八大基本資料型別 + String(為了降低複雜度)二次開發框架流程1、知道QuertRUle規範,定義了跟多查詢規則的常量,定義了查詢規則儲存方法2、提供一個抽象Dao類給使用者去實現,基於單表操作3、把實體的配置資訊解析成一個EntityOpertion物件,同時實現了ORM的自動過程4、在抽象的Dao呼叫查詢方法,把QueryRule作為引數傳入,提供一個QueryRule搞定所有操作(對使用者來說只要知道一個類,就會用這個框架了)5、再將傳入的QueryRule交給QueryRuleSqlBuilder構建出一個sql語句(被拆分了SQL)6、拼接CRUD SQL語句7、交給JdbcTemplate執行8、呼叫EntityOpertion的ORM過程9、返回結果,對於使用者來說都是單表操作,而且規定了泛型,所以不需要做任何強制型別轉換4.不依賴spring的orm框架 那麼orm的實現原理是什麼呢,我們可以看原始碼