初識 Mybatis(一) —— 基本配置及用法

這篇文章來自我的博客

正文之前

在使用 SSM 對之前所做的小項(xiàng)目重構(gòu)了之后,發(fā)現(xiàn)需要寫幾篇文章來總結(jié)一下各個部件的用法幽崩,先寫幾篇關(guān)于 Mybatis 的文章,正好補(bǔ)缺補(bǔ)漏順便總結(jié)一下

主要內(nèi)容:

  1. Mybatis 簡介
  2. 測試項(xiàng)目構(gòu)建
  3. 配置文件
  4. 增刪改查

正文

1. Mybatis 簡介

引用官網(wǎng)的介紹:

MyBatis 是一款優(yōu)秀的持久層框架鳞绕,它支持定制化 SQL饥努、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集颗胡。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息毫深,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。

總而言之毒姨,是個框架就對了

2. 測試項(xiàng)目構(gòu)建

要使用 Mybatis哑蔫,我們需要先導(dǎo)入兩個包:

mybatis-3.4.6
mysql-connector-java-5.1.46

我們先創(chuàng)建所要用到的包和類:

  • Product 是實(shí)體類,對應(yīng)數(shù)據(jù)庫中的表

  • db.properties 是外部配置數(shù)據(jù)庫信息的文件

  • SqlMapConfig 是 Mybatis 的配置文件(文件名不固定)

  • ProductMapper.xml 是對應(yīng)的映射文件

  • ProductTest 是測試類

lib 包中的其他文件是日志文件和單元測試文件

使用到的數(shù)據(jù)庫中的表為 product 表:

創(chuàng)建實(shí)體類 Product :

3. 配置文件

關(guān)于 Mybatis 的信息都在 SqlMapConfig.xml 文件中

1. 配置環(huán)境

Mybatis 可以對應(yīng)多種環(huán)境弧呐,這在配置文件中定義:

<?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>
    <!-- 配置的環(huán)境闸迷,可以有多個環(huán)境來對應(yīng)多種數(shù)據(jù)庫,至少要有一個環(huán)境 id 與此對應(yīng) -->
    <environments default="mysql">
        <!-- 這里的環(huán)境 id俘枫,就是具體某個數(shù)據(jù)庫的 id -->
        <environment id="mysql">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
        <!--
        <environment id="oracle">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
        -->
    </environments>
</configuration>
2. 事務(wù)管理和數(shù)據(jù)源
<transactionManager type="JDBC"/>
<dataSource type="POOLED"></dataSource>

事務(wù)管理有兩種:JDBC 和 MANAGED腥沽,我們就關(guān)注 JDBC,它其實(shí)就是使用了 JDBC 的設(shè)置來進(jìn)行管理鸠蚪、

數(shù)據(jù)源有三種:

  • UNPOOLED:在請求時打開和關(guān)閉連接今阳,如果對數(shù)據(jù)庫的使用較為頻繁,則不適用此方式茅信,太浪費(fèi)時間

  • POOLED:連接池盾舌,最常用的方式,一開始創(chuàng)建一定數(shù)量的連接蘸鲸,即用即取妖谴,用完歸還

  • JNDI:為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用

3. 數(shù)據(jù)庫信息

有關(guān)數(shù)據(jù)庫的信息可以直接寫在配置文件里面:

不過,通常的做法是在外部創(chuàng)建一個 db.properties 文件:

然后用外部配置來替換這些屬性的值棚贾,只是引用外部配置文件需要在配置數(shù)據(jù)源之前進(jìn)行

關(guān)于 Mybatis 的系統(tǒng)配置就先到這窖维,接下來是實(shí)體類相關(guān)的一個映射文件 ProductMapper.xml 的配置

4. 映射文件

在實(shí)體類的映射文件中寫明了你要進(jìn)行什么操作:

接下來解釋這個文件:

mapper 映射器:需要定義命名空間榆综,因?yàn)楹竺嬲{(diào)用的時候要用到

select 元素:對應(yīng) SQL 中的查詢操作,id 指的是這個查詢操作的名稱铸史,調(diào)用它的時候需要使用這個 id鼻疮, resultType 指的是返回類型,我這里查詢出的每一條記錄都指定為 Product 類型琳轿,相類似的還有 update判沟、insert 和 delete 元素,對應(yīng)相關(guān)的的 SQL 操作

5. 加載映射文件

把映射文件寫完了之后崭篡,我們需要告訴 Mybatis 去哪里找這些 SQL 語句挪哄,所以我們在 Mybatis 配置文件里寫出路徑:

    <mappers>
        <mapper resource="mapper/ProductMapper.xml"/>
    </mappers>

4. 增刪改查

首先我們先說一下 Mybatis 是怎么用的:

  • Mybatis 中有一個工具類叫 Resources,使用它來加載你的配置文件

  • SqlSessionFactoryBuilder 根據(jù)配置的 XML 文件(我們這里就是指 SqlMapConfig.xml)中的 <configuration> 元素來創(chuàng)建一個 SqlSessionFactory 實(shí)例

  • Mybatis 應(yīng)用是以一個 SqlSessionFactory 的實(shí)例為中心來展開工作的

        //配置文件的位置是基于我這個測試項(xiàng)目來寫的
        String resource = "config/SqlMapConfig";
        //輸入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

然后得到 SqlSession 的實(shí)例琉闪,就可以用來執(zhí)行 SQL 語句了:

        SqlSession sqlSession = sqlSessionFactory.openSession();
1. 增加記錄

我們先在映射文件中寫一個增加記錄的操作:

    <insert id="insertProduct" parameterType="bean.Product">
        INSERT INTO product VALUES
        (#{id}, #{barcode}, #{name}, #{units}, #{purchasePrice}, #{salePrice}, #{inventory})
    </insert>

這里的 #{} 是一個占位符迹炼,就相當(dāng)于 SQL 中的 ? 符號,添加的參數(shù)類型是 Product 類型的

然后我們在測試類中進(jìn)行添加操作:

這里的 insert 操作的第一個參數(shù)就是用來定位 SQL 語句的颠毙,它是命名方式是映射文件的命名空間.SQL語句的 ID斯入,然后這第二個參數(shù)就是我添加進(jìn)去的記錄,在最后一定要進(jìn)行提交蛀蜜,否則是無效的刻两,進(jìn)行測試:

這時候查看表中的所有記錄就會發(fā)現(xiàn)剛才的操作是成功的:

2. 刪除記錄
    <delete id="deleteProduct" parameterType="String">
        DELETE FROM product
        WHERE id = #{id}
    </delete>

根據(jù) ID 來刪除商品,這里的參數(shù)類型是 String

    @Test
    public void test() throws IOException{
        String resource = "config/SqlMapConfig";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.delete("ProductMapper.deleteProduct", "123");
        sqlSession.commit();
    }

運(yùn)行之后就能看到我們第一步添加進(jìn)去的商品被刪除了:

3. 修改記錄

我們也是根據(jù)商品 ID 來修改記錄滴某,只不過參數(shù)類型是 Product:

    <update id="updateProduct" parameterType="bean.Product">
        UPDATE product SET 
        barcode = #{barcode},
        name = #{name},
        units = #{units},
        purchasePrice = #{purchasePrice},
        salePrice = #{salePrice},
        inventory = #{inventory}
        WHERE id = #{id}
    </update>

在測試中磅摹,我們創(chuàng)建一個商品的實(shí)例,然后用這個實(shí)例來替換掉數(shù)據(jù)庫中的相對應(yīng)的記錄:

        Product product = new Product("1F01DC70F9A64B2CBB52B92C41FBCC9E", "123", 
                                        "T-shirt", "piece", "50", "100", "10");
        sqlSession.update("ProductMapper.updateProduct", product);
        sqlSession.commit();

然后就會發(fā)現(xiàn)表中的第一條記錄已被更改:

4. 查詢記錄

我們用一個列表來存放表中的所有數(shù)據(jù)霎奢,這里沒有用到參數(shù)户誓,只要定義返回類型就可以了:

    <select id="findAllProducts"  resultType="bean.Product">
        SELECT * FROM product
    </select>

這里不需要 commit,我們并沒有提交至數(shù)據(jù)庫中幕侠,只是查詢:

        List<Product> list = sqlSession.selectList("ProductMapper.findAllProducts");
        for (Product p :
                list) {
            System.out.println(p);
        }

然后就能看到 5 條記錄:

總結(jié)

若想要成功地使用 Mybatis厅克,總共有三個要點(diǎn):

1. SqlMapConfig.xml(Mybatis 配置文件)

這是 Mybatis 的核心,這里面配置了數(shù)據(jù)庫的基本信息以及映射文件的加載信息等

2. 實(shí)體類橙依、接口

也就是 POJO(Plain Old Java Objects,普通的 Java對象),我們這篇文章中的 Product 實(shí)體類硕旗,關(guān)于接口窗骑,我們這一篇文章中沒有說明,接口是對應(yīng)映射文件存在的漆枚,接口的命名和映射文件同名创译,這個在之后將 Mybatis 逆向工程的時候會說到

3. 映射文件

映射文件就是我們上面寫到的 ProductMapper.xml,它的作用不僅僅是帶有 SQL 語句墙基,還能將 POJO 映射成為數(shù)據(jù)庫中的記錄软族,所以我們剛才才能夠使用占位符進(jìn)行增刪改查操作或?qū)⒉樵兘Y(jié)果映射為POJO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刷喜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子立砸,更是在濱河造成了極大的恐慌掖疮,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颗祝,死亡現(xiàn)場離奇詭異浊闪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)螺戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門搁宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倔幼,你說我怎么就攤上這事盖腿。” “怎么了损同?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵翩腐,是天一觀的道長。 經(jīng)常有香客問我揖庄,道長栗菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任蹄梢,我火速辦了婚禮疙筹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禁炒。我一直安慰自己而咆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布幕袱。 她就那樣靜靜地躺著暴备,像睡著了一般。 火紅的嫁衣襯著肌膚如雪们豌。 梳的紋絲不亂的頭發(fā)上涯捻,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音望迎,去河邊找鬼障癌。 笑死,一個胖子當(dāng)著我的面吹牛辩尊,可吹牛的內(nèi)容都是我干的涛浙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轿亮!你這毒婦竟也來了疮薇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤我注,失蹤者是張志新(化名)和其女友劉穎按咒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仓手,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胖齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗽冒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀伙。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖添坊,靈堂內(nèi)的尸體忽然破棺而出剿另,到底是詐尸還是另有隱情,我是刑警寧澤贬蛙,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布雨女,位于F島的核電站,受9級特大地震影響阳准,放射性物質(zhì)發(fā)生泄漏氛堕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一野蝇、第九天 我趴在偏房一處隱蔽的房頂上張望讼稚。 院中可真熱鬧,春花似錦绕沈、人聲如沸锐想。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赠摇。三九已至,卻和暖如春浅蚪,著一層夾襖步出監(jiān)牢的瞬間藕帜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工惜傲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淮逊,地道東北人半开。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓码泛,卻偏偏與公主長得像伙窃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浊伙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis 撞秋? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,527評論 0 4
  • 人與動物的區(qū)別是思想嚣鄙,因?yàn)槿巳诵南氩煌腔撸猿蔀閬y世之源,所謂潘多拉盒子也或是指的不是什么魔而是思想之亂象哑子。 后來...
    炎黃黃閱讀 552評論 0 4
  • 周邊人的眼神舅列,笑聲,對我的影響很大卧蜓。 吃過早飯后帐要,走在路上。后面一個女生突然跑到前面和另一個女生竊竊私語弥奸,當(dāng)...
    吟_心閱讀 283評論 0 0