1. 程式人生 > >SSM(MyBatis+Spring+SpringMVC)之MyBatis總結

SSM(MyBatis+Spring+SpringMVC)之MyBatis總結

ringbuf code pad name 傳遞 hashmap tor names jdbc技術

對於SSM(MyBatis+Spring+SpringMVC)之MyBatis總結

對於ORM持久化框架之前一直是用的JDBC去連接數據庫 ,對於JDBC來連接庫來說可能存在一些不足,那麽MyBatis確切的說只能算半持久化框架,因為MyBatis是需要我們去自動的編寫我們的SQL語句的,我們可以用JDBC&MyBatis做一些比較

我們在使用JDBC的時候會對數據庫進行一些頻繁創建連接和釋放連接的操作從而影響的整個系統的性能。那麽針對這一方面我們的MyBatis很好的利用了數據庫連接池來對我們的鏈接進行的管理,列如我們在SQLMapConfig.xml的配置文件中使用連接池的技術很好的解決了這一問題那麽連接池的原理就是為了提高性能而生產出來的,第一次連接數據庫時會創建一個連接然後請求結束後那麽連接並不會去關閉,而是放入了連接池中等待下一次的連接,當有請求來時直接使用上一次的連接進行對Server的訪問那麽這樣就省略了創建連接和銷毀連接從而從一定程度上提高了程序的性能

回顧之前學習JDBC技術的時候,我們使用JDBC連接數據庫SQL語句使用StringBUffer和StringBuilder或者是String進行拼接的那麽不利於我們對代碼的維護,我們都知道在實際的應用中很多的時候都會變動SQL語句 MyBatis呢將我們的SQL語句放入到Mapper映射文件中動態的拼寫SQL那麽SQL語句從一定程度上來說也是可以提高性能,並且提高了代碼的可擴展性的問題

MyBatis也能夠利用@Param註解(兩個以上的參數需要加上@Param註解)自動的將Java對象映射到我們SQL語句,MyBatis也能將我們執行完之後的SQL語句映射到對象中

MyBatis的執行一共可以分為五步:首先創建SqlSessionFactory,通過SqlSessionFactory創建SqlSession,這時候我們就可以通過SqlSession進行一些對數據庫方面的操作,然後調用session對數據庫的事務進行一些提交,最後session.close()方法關閉數據庫

MyBatis的一級緩存和二級緩存

Mybatis首先去緩存中查詢結果集,如果沒有則查詢數據庫,如果有則從緩存取出返回結果集就不走數據庫。Mybatis內部存儲緩存使用一個HashMap,key為hashCode+sqlId+Sql語句。value為從查詢出來映射生成的java對象

Mybatis的二級緩存即查詢緩存,它的作用域是一個mapper的namespace,即在同一個namespace中查詢sql可以從緩存中獲取數據。二級緩存是可以跨SqlSession的。

那麽一級緩存是需要默認開啟的而二級緩存是需要手動的去開啟的

MyBatis中Sql語句使用#{}傳入參數和${}傳入參數區別

使用#{}傳入參數時會自動的為參數加上單引號而${}是原樣的把參數直接顯示到SQL語句中,#{}在很大的程度上能夠防止SQL註入,${}無法阻止SQL的註入,一般${}用於傳遞對象比如數據庫中的表名,MyBatis排序時使用order by 動態參數時需要註意,用$而不是#

MyBatis中namescape的作用

在MyBatis中,映射文件中的那麽namespace是用於綁定Dao的接口的,也就是我們常說的面向接口的編程方式,我們通過namespace綁定接口後,不需要去寫接口的實現類,mybatis會通過自動綁定的功能幫助你找到要執行的對應的SQL語句中

那麽在這裏也可以去提一下我們的CURD中的ID作用也是一致的 那麽通過ID找到對應的SQL語句

輸出結果類型

  1. resultType,字段和java對象中屬性一致推薦使用resultType

  2. resultMap,字段和java對象中屬性不一致的情況比較多的時候使用resultMap


SSM(MyBatis+Spring+SpringMVC)之MyBatis總結