Mybatis框架(入門)

(一)MyBatis 概述java

           MyBatis 本是Apache的一個開源項目 iBatis2010年這個項目由apache software foundation 遷移到了google code,並git

且更名爲MyBatis(支持普通 SQL查詢,存儲過程和高級映射的優秀持久層架),再後來託管到github下程序員

       (1)MyBatis對JDBC的操做數據庫的過程進行封裝,使開發者只需關注 SQL 自己(經過mybatis提供的映射方式,自由靈github

活生成(半自動化,大部分須要程序員編寫sql)知足須要sql語句),而不須要花費精力去處理例如註冊驅動、建立sql

connection、建立statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼;數據庫

        (2)Mybatis經過xml或註解的方式將要執行的各類statement配置起來,並經過java對象和statement中的sql進行映射生成apache

終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回(輸出映射)
   
(二)MyBatis 框架架構緩存

            

 

(三)MyBatis 執行流程mybatis

                      

          MyBatis應用程序根據XML配置文件建立SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,架構

一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所須要的全部方法,能夠經過

SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完以後關閉SqlSession

 

(四)MyBatis 的優缺點

     一、優勢:

                (1)簡單易學:mybatis自己就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,經過文檔和源代碼,能夠比較徹底的掌握它的設計思路和實現;
               (2)靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。經過sql基本上能夠實現咱們不使用數據訪問框架能夠實現的全部功能,或許更多;
               (3)解除sql與程序代碼的耦合:經過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提升了可維護性;
               (4)提供映射標籤,支持對象與數據庫的orm字段關係映射;
               (5)提供對象關係映射標籤,支持對象關係組建維護;
               (6)提供xml標籤,支持編寫動態sql

         二、缺點:

               (1)編寫SQL語句時工做量很大,尤爲是字段多、關聯表多時,更是如此;
               (2)SQL語句依賴於數據庫,致使數據庫移植性差,不能更換數據庫;
               (3)框架仍是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,可是整個底層數據庫查詢實際仍是要本身寫的,工做量也比較大,並且不太容易適應快速數據庫修改;
               (4)二級緩存機制不佳

            三、總結:  

             mybatis的優勢一樣是mybatis的缺點,正由於mybatis使用簡單,數據的可靠性、完整性的瓶頸便更多依賴於程序員對sql的使用水平上。sql寫在xml裏,雖然方便了修改、優化和統一瀏覽,但可讀性很低,調試也很是困難,也很是受限(mybatis沒有hibernate那麼強大,可是mybatis最大的優勢就是簡單小巧易於上手,方便瀏覽修改sql語句)

            mybatis和hibernate本質區別和應用場景

             (1)hibernate:是一個標準ORM框架(對象關係映射),入門門檻較高的,不須要程序寫sql,sql語句自動生成(對sql語句進行優化、修改比較困難的)
                    應用場景:適用與需求變化很少的中小型項目,好比:後臺管理系統,erp、orm、oa。                        

             (2)mybatis:專一是sql自己,須要程序員本身編寫sql語句,sql修改、優化比較方便。mybatis是一個不徹底的ORM框架,雖然程序員本身寫sql,mybatis也能夠實現映射(輸入映射、輸出映射)
                    應用場景:適用與需求變化較多的項目,好比:互聯網項目

               企業進行技術選型,以低成本高回報做爲技術選型的原則,根據項目組的技術力量進行選擇。

 

(五)MyBatis 入門程序

             

     一、 parameterType和resultType

       (1)parameterType:在映射文件中經過parameterType指定輸入參數的類型,定義輸入到sql中的映射類型,#{id}表示使用

perparestatement設置佔位符並將輸入變量id傳到sql輸入映射

     (2)resultType:在映射文件中經過resultType指定輸出結果的類型,定義結果映射類型輸出映射

      二、#{} 和 ${}

      (1)#{}表示一個佔位符號,#{}接收輸入參數,類型能夠是簡單類型,pojo、hashmap若是接收簡單類型,#{}中能夠寫成

value或其它名稱#{}接收pojo對象值,經過OGNL讀取對象中的屬性值,經過屬性.屬性.屬性...的方式獲取對象屬性值

       (2)${}表示一個拼接符號,會引用sql注入,因此不建議使用${} (    ${}接收輸入參數,類型能夠是簡單類型,pojo、

hashmap,若是接收簡單類型,${}中只能寫成value,${}接收pojo對象值,經過OGNL讀取對象中的屬性值,經過屬性.屬性.屬

性...的方式獲取對象屬性值)

        三、 selectOne和selectList

               selectOne表示查詢出一條記錄進行映射。若是使用selectOne能夠實現使用selectList也能夠實現(list中只有一個對

象)。selectList表示查詢出一個列表(多條記錄)進行映射,若是使用selectList查詢多條記錄,不能使用selectOne。