【MyBatis】初體驗

Spring框架的學(xué)習(xí)告一段落,重點學(xué)習(xí)了IoC和AOP的概念以及應(yīng)用,接下來本篇進入Mybatis的學(xué)習(xí)。

一、MyBatis簡介

MyBatis前身是iBatis,是Apache的一個開源項目,2010年這項目轉(zhuǎn)到Goodle并更名為MyBatis,2013年遷至github,是一款開源的數(shù)據(jù)持久層框架,內(nèi)部封裝了JDBC訪問數(shù)據(jù)庫的操作,支持普通的SQL查詢、存儲過程和高級映射,幾乎消除了所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索,其主要思想是將程序中大量的SQL語句剝離出來,配置在配置文件中,實現(xiàn)SQL的靈活配置。在我的另外一篇文章中有關(guān)于各個框架的介紹以及mybatis和hibernate這兩款數(shù)據(jù)持久層框架的區(qū)別介紹。

  • 優(yōu)點:mybatis相當(dāng)靈活,SQL語句寫在XML中,從程序中徹底分離,既降低了耦合度,又便于統(tǒng)一管理和優(yōu)化,還可重用。
  • 缺點:SQL語句依賴于數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫移植性差,不能隨意更換數(shù)據(jù)庫。
以往的JDBC代碼.png

二、基本概念

Q:什么是ORM?
A:即對象/關(guān)系映射(Object Relational Mapping),是一種數(shù)據(jù)持久化技術(shù),它可以解決數(shù)據(jù)庫和程序間的異構(gòu)性。它在對象模型和關(guān)系型數(shù)據(jù)庫之間建立起對應(yīng)關(guān)系,并提供了一種機制,通過JavaBean對象去操作數(shù)據(jù)庫表中的數(shù)據(jù)。mybatis框架就是一種半自動化的ORM實現(xiàn),通過簡單的XML或者注解進行配置和原始映射,在實體類和SQL語句之間建立映射關(guān)系。

ORM圖.png
通過代碼來解釋如下圖:
Q:什么是數(shù)據(jù)持久化?
A:數(shù)據(jù)持久化是將內(nèi)存中的數(shù)據(jù)類型轉(zhuǎn)化為存儲模型以及將存儲模型轉(zhuǎn)化為內(nèi)存中的數(shù)據(jù)類型的統(tǒng)稱。比如,文件的存儲,數(shù)據(jù)的讀取,對數(shù)據(jù)表的增刪改查。
Q:什么是DTD文件?
A:mybatis的DTD文件功能是實現(xiàn)自動聯(lián)想節(jié)點元素。

三、mybatis環(huán)境搭建步驟:

  1. 下載jar包并部署jar包 mybatis-3.2.2.jar與mysql-connector-java-5.1.0-bin.jar(連接mysql)和log4j-1.2.17.jar(打印日志)
  2. 編寫mybatis核心配置文件 mybatis-cfg.xml
  3. 創(chuàng)建實體類 pojo
  4. 創(chuàng)建dao接口 dao
  5. 創(chuàng)建SQL映射文件 mapper
    SQL映射文件一般對應(yīng)相應(yīng)的POJO類,命名規(guī)則為:POJO名稱 +Mapper。一般情況下,保證POJO對象的屬性與數(shù)據(jù)庫表的字段名一致即可。

注意:mybatis-cfg.xml文件的元素節(jié)點是有一定順序的,如果節(jié)點元素位置不按順序則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 /> <!-- 用來引入外部配置屬性文件或者直接配置屬性 -->
    <settings /> <!-- 設(shè)置mybatis在運行時的行為方式 -->
    <typeAliases /> <!-- 為Java類型命名一個別名 -->
    <typeHandlers /> <!-- 類型處理器 -->
    <objectFactory /> <!-- 對象工廠 -->
    <plugins /> <!-- 插件 -->
    <environments> <!-- 配置環(huán)境 -->
        <environment> <!-- 環(huán)境變量 -->
            <transactionManager /> <!-- 事務(wù)管理器 -->
            <dataSource /> <!-- 數(shù)據(jù)源 -->
        </environment>
    </environments>
    <databaseIdProvider /> <!-- 數(shù)據(jù)庫廠商標(biāo)識 -->
    <mappers /> <!-- 映射器 -->
</configuration>

四、應(yīng)用

每個MyBatis的應(yīng)用程序都以一個SqlSessionFactory對象的實例為核心。
步驟:先獲取SqlSessionFactoryBuilder對象,調(diào)用build()方法創(chuàng)建SqlSessionFactory對象,之后再通過SqlSessionFactory對象的openSession()方法獲取SqlSession實例,而SqlSession對象中就完全包含了以數(shù)據(jù)庫為背景的所有執(zhí)行SQL操作的方法。
1、SqlSessionFactoryBuilder生命周期和作用域?
其最大的特點就是用過即丟,一旦創(chuàng)建了SqlSessionFactory對象,這個類就不需要存在了,因此SqlSessionFactoryBuild的最佳使用是作為局部變量。
2、SqlSessionFactory的生命周期和作用域?
其特點與SqlSessionFactoryBuild的特點恰恰相反,它是一旦創(chuàng)建,就會在整個應(yīng)用運行過程中始終存在。SqlSessionFactory的最佳作用域是Application,即隨著應(yīng)用程序的生命周期一同存在。“存在于整個應(yīng)用運行期間,并且僅有一個對象實例”,這種模式就是單例模式。實現(xiàn)方式可放在靜態(tài)代碼塊中,保證SqlSessionFactory對象只被創(chuàng)建一次。
3、SqlSession的生命周期和作用域?
SqlSession對應(yīng)一次數(shù)據(jù)庫會話,由于數(shù)據(jù)庫會話不會是永久的,所以自然的,其生命周期也不會永久。SqlSession實例不能被共享,不是線程安全,因此最佳作用域是request作用域或者方法體作用域,還有注意SqlSession實例使用完要關(guān)閉掉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容