MyBatis框架之基本知識介紹


前身背景:

         前身是iBatis,為Apache的一個開源項目。2010年遷移到了Google Code,改名為MyBatis.2013年遷移到Github。

MyBatis框架以及ORM

         MyBatis是一個開源的數據持久層框架,內部封裝了通過JDBC訪問數據庫的操作,支持普通的SQL查詢、存儲過程和高級映射。作為持久層框架,主要思想是將程序中的大量的SQL語句分離出來,配置在相應的配置文件中,這樣可以在不修改代碼的情況下,直接在配置文件中的修改SQL。

         ORM(Object/Relational Mapping)對象關系映射。是一種數據持久化的技術。在對象模型和關系型數據庫之間建立關系,並且提供了一種機制,通過JavaBean對象去操作數據庫表中的數據。MyBatis通過簡單的XML或者注解進行配置和原始映射,將實體類和SQL語句之間建立映射關系,是一種半自動化的ORM實現。

MyBatis環境搭建:

         1.下載jar包,

官方網站:http://mybatis.org.(目前官網在國內受限制,若可以訪問到,所有下載鏈接全部引導至github上-----推薦下載mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip)

github網址:https://github.com/mybatis/mybatis-3/releases.

         2.部署jar包,

將下載的jar包以及需要的jar包(如:數據庫驅動jar文件或log4j負責日志數據jar文件)部署至項目的lib目錄下。

         3.創建mybatis核心配置文件-configuration.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="mybatis.properties" />
    <typeAliases>
        <package name="cn.bdqn.pojo" />
    </typeAliases>
    <!-- 配置數據源,事務 -->
    <environments default="deploy">
        <environment id="deploy">
            <!-- 事務管理器:JDBC/MANAGED -->
            <transactionManager type="JDBC" />
            <!-- 數據源:POOLED/UNPOOLED/JNDI -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
</configuration>

  configuration:配置文件的根節點。

  Properties:從外部引入指定的properties屬性文件,一般為數據庫連接的配置信息。

  Settings:設置MyBatis運行中的一些行為,如果,此次設置MyBatis的log日志文件實現為LOG4J,既使用log4j實現日志功能。

  Environments表示配置多套運行環境,映射到不同的數據庫,該元素下可以配置多個environment子元素節點,但是必須通過default指定一個默認的運行環境。

    <mappers>
        <mapper resource="cn/bdqn/dao/IUserMapper.xml" />
    </mappers>

  Mappers:作用是告訴MyBatis去哪里找SQL映射文件。

  Mapper:具體指定SQL映射文件的路徑,resource屬性的值表示映射文件的路徑。

------注意:MyBatis中核心配置文件的元素節點是有一定順序的,若不按順序排位,那么XML文件會報錯。

4.創建持久化類(POJO)和SQL映射文件。

  因為MyBatis是pojo(實體類)與是SQL語句之間的映射機制,一般情況下,保證pojo類的屬性和表中的字段名一致。

SQL映射文件元素節點

         Mapper:映射文件的根元素節點,只有一個屬性namespace:

                   Namespace:用於區分不同的mapper.全局唯一。(一般為接口的完全限定名)

         Select:查詢語句,常用屬性如下(特別屬性后面介紹---)

                   Id:該命名空間下的唯一標識符。

                   resultType:表示SQL語句的返回值類型。

5.編寫測試類

         (1)讀取全局配置文件(xxx.xml”)

    Reader reader = Resources.getResourceAsReader(“xxx.xml”);

         (2)創建sqlsessionfactory,完成配置文件的讀取。

    SqlSessionFactory    sessionFactory = new SqlSessionFactoryBuilder().build(reader);

         (3)創建sqlSession對象,通過sqlSession調用相應的方法進行操作。

    sessionFactory.openSession();//打開sqlSession對象

    Sqlsession.getMapper(接口名.class).執行的方法(參數);

         (4)關閉sqlSession對象。

    sessionFactory.close();//關閉sqlSession對象

 

MyBatis優缺點以及其適用場合

優點:

    1.與JDBC相比,代碼量減少了50%以上。

    2.最簡單的持久層框架,小巧簡單易學

    3.SQL語句寫在XML文件,從程序代碼中徹底分離,便於統一管理和優化,並可重用。

    4.提供XML標簽,支持編寫動態SQL語句。

    5.提供映射文件,支持對象與數據庫的ORM字段關系映射。

缺點:

    1.SQL編寫工作量較大,對開發人員編寫SQL語句的功底有一定的要求。

    2.SQL依賴於數據庫,數據庫的移植性差,不能隨意更換數據庫。

適應場合:

    專注於SQL本身,一個靈活的DAO層的解決方案,對性能要求較高,或者需求變化較多的項目。

 

MyBatis的基本要素-----核心對象。

一、核心接口和類。

  (1)每個MyBatis的應用程序都以一個SqlSessionFactory對象的實例為核心。

  (2)首先獲取SqlSessionFactoryBuilder對象,根據xml文件或Configuration類的實例構建該對象。

  (3)獲取SqlSessionFactory對象,通過SqlSessionFactoryBuilder對象獲取。

  (4)通過SqlSessionFactory獲取SqlSession實例,此實例完全包含以數據庫為背景的所有執行SQL操作方法。

    直接執行已經映射的SQL語句。

  1.SqlSessionFactoryBuilder對象

作用:負責構建SqlSessionFactory,並且提供了多個build()方法的重載

    (1).build(Reader reader,String environment,Properties properties)//字節流

    (1).build(InputStream inputStream,String environment,Properties properties)//字符流

    (1).build(Configuration config)//類

生命周期和作用域:最大的特點為用過即丟,一旦創建了SqlSessionFactory對象之后,這個類就不再需要了。

最佳范圍存在於方法體內,也就是個局部變量而已。

·  2.SqlSessionFactory對象

作用:可以通過此對象的OpenSession()方法獲得SqlSession()實例。

生命周期和作用域:對象一旦創建,在整個應用運行過程中始終存在。最佳的作用域范圍是Application,隨着應用的生命周期一同存在。

--------------------------------------------------------------------------------------------------------------------------

1.創建工具類util,在靜態塊中創建SqlSessionFactory對象。

    

 2.創建SqlSession對象和關閉SqlSession

   

 

--------------------------------------------------------------------------------------------------------------------------

 ·  3.SqlSession對象

作用:用於持久化操作的對象,類似於JDBC中的connection,提供了面向數據庫執行SQL命令所需的所有方法,

 生命周期和作用域:對應着一次數據庫會話,若關閉的SqlSession會話,就需要重新創建它。

注意:每個線程都有自己的SqlSession實例,所以不能被共享,是線程非安全的,最佳作用域范圍是request作用域或者方法體作用域。

使用方式:1.直接執行已映射的Sql語句,例如:直接調用selectList方法執行查詢。

     2.基於mapper接口方式操作數據。例子:Sqlsession.getMapper(接口名.class).執行的方法(參數);

二、核心配置文件

核心配置文件的一些基本的元素,需注意,元素節點有相應的先后順序。如下圖:

    

----configuration元素為整個xml配置文件的根節點,相當於總管。

1.properties元素:外部化、可替代的屬性。

  (1)通過外部指定的方式:<properties resource="database.properties">引入database.properties文件。

  (2)直接配置xml文件。

    <properties>

      <property name = "xx" value = "xx">......

    </properties>

補充:如果以上的兩種方式同時使用的話,外部引入優先級高於property子節點配置的值。

2.settings元素:設置重要的選項,用於設置和改變MyBatis運行中的行為。

設置項 描述 允許值 默認值
cacheEnabled 對在此配置文件下的所有cache進行全局性開/關設置 true | false true
lazyLoadingEnabled 全局設置懶加載,設置為false,則所有相關聯的都會被初始化加載 true | false true
autoMappingBehavior MyBatis對於resultMap自動映射的自動匹配級別 NONE | PARTIAL | FULL PARTAL

  autoMappingBehavior的三個允許值:

  NONE 表示取消自動映射;PARTIAL 只會自動映射沒有定義嵌套結果集映射的結果集。 FULL 會自動映射任意復雜的結果集(無論是否嵌套)。

3.typeAliases元素:配置類型別名,減少輸入多余的完整類名,以簡化操作。

  更簡化的寫法:通過package的name屬性直接指定包名,MyBatis會自動掃描指定包下的JavaBean,並默認設置別名(javabean的非限定類名)

4.environments元素:配置多套運行環境,可講SQL映射應用到不同數據庫環境上.

  (1)默認的運行ID:通過default屬性來指定當前的運行環境ID。對於環境ID的命名要確保唯一。

  (2)transactionManager事務管理器:類型分為JDBC和MANAGED,直接使用JDBC的提交和回滾功能。

    一、使用JDBC的事務管理機制:即利用java.sql.Connection對象完成對事務的提交(commit())、回滾(rollback())、關閉(close())等

    二、使用MANAGED的事務管理機制:這種機制MyBatis自身不會去實現事務管理,而是讓程序的容器如(JBOSS,Weblogic)來實現對事務的管理

  (3)dataSource元素使用標准的JDBC數據源接口配置JDBC連接對象的資源。

    1.UNPOOLED:為每一個數據庫操作創建一個新的連接,並關閉它,該方式只適用於只有小規模數量並發用戶的簡單應用程序上。

    2.POOLED:創建一個數據庫連接池,池中的一個連接將會被用作數據庫操作,一旦完成,會將此連接返回給連接池,經常使用此種方式。

    3.JNDI:從在應用服務器配置好的JNDI數據源datasource獲取數據庫連接,在生產環境中,優先考慮此方式。

5.mapper元素:映射器,用來定義SQL的映射語句,只需告訴MyBatis去哪里找這個SQL語句,

  (1)使用類資源路徑獲取資源。

    <mappers>

      <mapper resource="cn/smbms/dao/user/UserMapper.xml" />

    </mappers>

  (2)使用URL獲取資源。

    <mappers>

      <mapper url="file:///E:/sqlmappers/UserMapper.xml" />

    </mappers>

---------------------------------------------------------------------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM