mybatis 1

MyBatis是什麼?

MyBatis是一款一流的支持自定義SQL、存儲過程和高級映射的持久化框架。MyBatis幾乎消除了全部的JDBC代碼,也基本不須要手工去 設置參數和獲取檢索結果。MyBatis可以使用簡單的XML格式或者註解進行來配置,可以映射基本數據元素、Map接口和POJOs(普通java對 象)到數據庫中的記錄。html


簡介

每一個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個 SqlSessionFactory實例能夠經過SqlSessionFactoryBuilder得到。 SqlSessionFactoryBuilder能夠從一個xml配置文件或者一個預約義的配置類的實例得到。


用xml文件構建SqlSessionFactory實例是很是簡單的事情。推薦在這個配置中使用類路徑資源 (classpath resource),但你可使用任何Reader實例,包括用文件路徑或file://開頭的url建立的實例。MyBatis有一個實用類 ----Resources,它有不少方法,能夠方便地從類路徑及其它位置加載資源。

MyBatis工做流程

(1)加載配置並初始化
觸發條件:加載配置文件
配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)接收調用請求
觸發條件:調用Mybatis提供的API
傳入參數:爲SQL的ID和傳入參數對象
處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操做請求 觸發條件:API接口層傳遞請求過來
傳入參數:爲SQL的ID和傳入參數對象
處理過程:
(A)根據SQL的ID查找對應的MappedStatement對象。
(B)根據傳入參數對象解析MappedStatement對象,獲得最終要執行的SQL和執行傳入參數。
(C)獲取數據庫鏈接,根據獲得的最終SQL語句和執行傳入參數到數據庫執行,並獲得執行結果。
(D)根據MappedStatement對象中的結果映射配置對獲得的執行結果進行轉換處理,並獲得最終的處理結果。
(E)釋放鏈接資源。
(4)返回處理結果將最終的處理結果返回。


功能架構



咱們把Mybatis的功能架構分爲三層:

一、API接口層:java

提供給外部使用的接口API,開發人員經過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。

二、數據處理層:sql

負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操做。

三、基礎支撐層:數據庫

負責最基礎的功能支撐,包括鏈接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來做爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。  


從XML中構建SqlSessionFactory

[java] view plain copy
  1. String resource = "com/accp/mybatis/data/Configuration.xml";    
  2. Reader reader = Resources.getResourceAsReader(resource);    
  3. sqlMapper = new SqlSessionFactoryBuilder().build(reader);    

MyBatis主配置文件

MyBatis配置文件中大標籤configuration下子標籤包括:緩存

configuration服務器

|--- propertiessession

|--- settingsmybatis

|--- typeAliases架構

|--- typeHandlersapp

|--- objectFactory

|--- plugins

|--- environments

|--- |--- environment

|--- |--- |--- transactionManager

|--- |--- |__ dataSource

|__ mappers


XML <configuration>配置文件包含對MyBatis系統的核心設置,包含獲取數據庫鏈接實例的數據源和決定事務範圍和控制的事務管理器。

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   
  7.     <!--在下面的datasource中可使用佔位符來引用屬性文件中的值-->  
  8.     <properties resource="properties/datasource.properties" />  
  9.   
  10.     <settings>  
  11.         <setting name="cacheEnabled" value="true" />  
  12.         <setting name="lazyLoadingEnabled" value="true" />  
  13.         <setting name="multipleResultSetsEnabled" value="true" />  
  14.         <setting name="useColumnLabel" value="true" />  
  15.         <setting name="useGeneratedKeys" value="false" />  
  16.         <setting name="defaultExecutorType" value="SIMPLE" />  
  17.         <setting name="defaultStatementTimeout" value="25000" />  
  18.     </settings>  
  19.       
  20.     <!-- 配置別名 類型別名是Java 類型的簡稱。它僅僅只是關聯到XML 配置,簡寫冗長的JAVA 類名。-->  
  21.     <typeAliases>  
  22.         <typeAlias type="com.accp.mybatis.model.Blog" alias="Blog"/>  
  23.     </typeAliases>  
  24.     <!-- 使用這個配置,"Blog"就能在任何地方代替"com.accp.mybatis.model.Blog"被使用。-->  
  25.       
  26.     <!--  
  27.     java 中一些簡單類型的別名  
  28.         別名  映射的類型   
  29.         _byte  byte   
  30.         _long  long   
  31.         _short  short   
  32.         _int   int    
  33.         _integer   int    
  34.         _double  double   
  35.         _float   float    
  36.         _boolean  boolean   
  37.         string  String   
  38.         byte  Byte   
  39.         long  Long   
  40.         short  Short   
  41.         int   Integer   
  42.         integer   Integer   
  43.         double  Double   
  44.         float   Float    
  45.         boolean  Boolean   
  46.         date  Date   
  47.         decimal  BigDecimal   
  48.         bigdecimal  BigDecimal   
  49.         object  Object   
  50.         map  Map   
  51.         hashmap  HashMap   
  52.         list  List    
  53.         arraylist  ArrayList   
  54.         collection  Collection   
  55.         iterator  Iterator  
  56.     -->  
  57.       
  58.   
  59.     <!-- 每一個數據庫(environment)對應一個SqlSessionFactory 實例-->  
  60.     <environments default="accp">  
  61.     <!--   
  62.         environments對於一個應用可能鏈接多個數據庫,那就須要配置不一樣的環境來鏈接不一樣的數據庫,  
  63.         每個SqlSessionFactory對應一個environments也能夠設置不一樣的環境應用於開發或測試的環境若是環境被忽略,  
  64.         那麼默認環境將會被加載,也就是default="development"的做用了  
  65.     -->  
  66.         <environment id="accp">  
  67.             <transactionManager type="JDBC" />  
  68.             <!--   
  69.                 transactionManager設置事物的管理類型是 type=」[JDBC|MANAGED]」  
  70.                 JDBC使用datasource的鏈接來管理事物範圍。  
  71.                 MANAGED本身不進行事物的提交和回滾,依靠容器來管理事物,設置closeConnection爲false,取消自動關閉鏈接   
  72.             -->  
  73.             <dataSource type="POOLED">  
  74.             <!--  
  75.                 dataSource設置數據源[UNPOOLED|POOLED|JNDI]  
  76.                 POOLED:每次被請求時簡單打開和關閉鏈接  
  77.                 POOLED:JDBC 鏈接對象的數據源鏈接池的實現,用來避免建立新的鏈接實例時必要的初始鏈接和認證時間。  
  78.                 poolMaximumActiveConnections –  在任意時間存在的活動(也就是正在使用)鏈接的數量。默認值:10   
  79.                 poolMaximumIdleConnections –  任意時間存在的空閒鏈接數。  
  80.                 oolMaximumCheckoutTime –  在被強制返回以前,池中鏈接被檢查的時間。默認值:20000 毫秒(也就是 20 秒)  
  81.                 poolTimeToWait – 這是給鏈接池一個打印日誌狀態機會的低層次設置,還有從新嘗試得到鏈接,這些狀況下每每須要很長時間(爲了不鏈接池沒有配置時靜默失敗)。 默認值:20000 毫秒(也就是 20 秒)  
  82.                 poolPingQuery –  發送到數據的偵測查詢,用來驗證鏈接是否正常工做,而且準備接受請求。默認是「NO PING QUERY SET」,這會引發許多數據庫驅動鏈接由一個錯誤信 息而致使失敗。   
  83.                 poolPingEnabled  –  這是開啓或禁用偵測查詢。若是開啓,你必須用一個合法的SQL語句(最好是很快速的)設置 poolPingQuery 屬性。默認值:false。  
  84.                 poolPingConnectionsNotUsedFor  –  這 是用來配置 poolPingQuery 屢次時間被用一次。這能夠被設置匹配標準的數據庫鏈接超時時間,來避免沒必要要的偵測。默認值:0 (也就是全部 鏈接每一時刻都被偵測-但僅僅當 poolPingEnabled 爲 true 時適用)。    
  85.                 JNDI –  這個數據源的實現是爲了使用如 Spring 或應用服務器這類的容器,容器能夠集中或在外部配置數據源,而後放置一個 JNDI 上下文的引用。  
  86.                 initial_context  –  這 個屬性用來從初始上下文中尋找環境(也就是initialContext.lookup(init ial——context))。這是個可選屬性,若是 被忽略,那麼data_source 屬性將 會直接以 init ialContext 爲背景再次尋找。   
  87.                 data_source  –  這 是引用數據源實例位置的上下文的路徑。它會以由 init ial_context查詢返回的環境爲背景來查找,如 果 init ial_context 沒有返回結果時,直接以初始上下 文爲環境來查找。  
  88.             -->  
  89.                 <property name="driver" value="${driver}" />  
  90.                 <property name="url" value="${url}" />  
  91.                 <property name="username" value="${username}" />  
  92.                 <property name="password" value="${password}" />  
  93.                 <property name="driver.encoding" value="${encoding}" />  
  94.             </dataSource>  
  95.         </environment>  
  96.     </environments>  
  97.   
  98.     <!--mappers是告訴MyBatis 去哪尋找映射SQL 的語句。可使用類路徑中的資源引用,或者使用字符,輸入確切的URL 引用。-->  
  99.     <mappers>  
  100.         <mapper resource="com/accp/mybatis/data/BlogMapper.xml" />  
  101.     </mappers>  
  102. </configuration>  

從SqlSessionFactory中獲取SqlSession

經過如下代碼得到SqlSession實例。
[java] view plain copy
  1. SqlSession session = sqlMapper.openSession(); 
相關文章
相關標籤/搜索