MyBatis入門

MyBatis HelloWorld

目錄結(jié)構(gòu)

directory.png

準(zhǔn)備數(shù)據(jù)庫

DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog`(
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50),
  PRIMARY KEY(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;

INSERT INTO `blog` VALUES (101,'Gawegor');

jar包

使用Maven添加依賴:

    </dependencies>
        <!-- mybatis包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- mysql JDBC包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>

MyBatis配置文件

MyBatis核心全局配置文件幸缕,一般命名為:mybatis-config.xml蚯舱。通過這個(gè)文件可以配置事務(wù)管理腹泌、數(shù)據(jù)庫連接信息睦番、連接池和映射文件等。

<?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>
    
    <environments default="development">
        <environment id="development">
            <!-- 事務(wù)管理設(shè)置 -->
            <transactionManager type="JDBC"/>
            <!-- 數(shù)據(jù)庫連接設(shè)置 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件設(shè)置 -->
    <mappers>
        <mapper resource="mybatis/hello/BlogMapper.xml"/>
    </mappers>
</configuration>

POJO

對應(yīng)數(shù)據(jù)庫表的POJO忿等。

package mybatis.hello;

import java.io.Serializable;

public class Blog implements Serializable {
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Id: " + getId() + ", Name: " + getName();
    }
}

Mapper接口

它定義了我們需要的CURD操作的方法艇棕。等價(jià)于DAO接口,但不需要實(shí)現(xiàn)召烂,由Mybatis生成碱工。

BlogMapper.class

package mybatis.hello;

public interface BlogMapper {
    Blog selectBlog(Integer id);
}

映射文件

BlogMapper.xml,對應(yīng)BlogMapper.class接口

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.hello.BlogMapper">
    <!-- 一個(gè)select對應(yīng)BlogMapper.class接口的一個(gè)方法 -->
    <select id="selectBlog" resultType="mybatis.hello.Blog">
        select * from Blog where id = #{id} <!-- id對應(yīng)方法參數(shù)名 -->
    </select>
</mapper>

因?yàn)槲覀兊?code>BlogMapper.xml放在了mybatis.hello奏夫,所以需要設(shè)置pom.xml怕篷,讓Maven構(gòu)建時(shí)將BlogMapper.xml放到資源目錄。pom.xml

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
               <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

使用MyBatis

上面完成了基礎(chǔ)配置酗昼,現(xiàn)在可以寫用MaBatis獲取獲取數(shù)據(jù)庫記錄的代碼了廊谓。

package mybatis.hello;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new 
            SqlSessionFactoryBuilder().build(inputStream);
        
        //獲取SqlSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
           //獲取BlogMapper接口的實(shí)現(xiàn)代理和用它的方法來獲取數(shù)據(jù)庫記錄
           BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
           Blog blog = mapper.selectBlog(101);
           System.out.println(blog);  
        } finally {
            sqlSession.close();
        }
    }
}

其中這里有幾個(gè)重要的點(diǎn):

  1. SqlSessionFactory,全局對象麻削,應(yīng)用生命周期中只創(chuàng)建一次蒸痹。里面保存了全局配置文件的預(yù)設(shè)信息春弥。也需要通過它來獲取SqlSession。
  2. SqlSession叠荠,對應(yīng)JDBC的Connection匿沛。它是非線程安全的,每次使用完都需要用close()關(guān)閉榛鼎。
  3. Mapper接口實(shí)現(xiàn)俺祠,通過SqlSession.getMapper(Class)可以獲取Mapper接口的一個(gè)實(shí)現(xiàn)(MyBatis已經(jīng)幫你實(shí)現(xiàn)好了)。

總結(jié)

  • MyBatis有一個(gè)全局配置文件借帘,用于配置事務(wù)管理蜘渣、連接池、數(shù)據(jù)庫連接信息和映射文件等肺然。
  • MyBatis通過一個(gè)映射文件 + 一個(gè)Mapper接口實(shí)現(xiàn)DAO層蔫缸。
    • 其中映射文件包含SQL語句,Mapper定義了CURD操作的方法际起。
  • 使用MyBatis獲取數(shù)據(jù)庫數(shù)據(jù)拾碌,需要使用SqlSessionFactorySqlSession街望。
    • SqlSessionFactory是全局對象校翔,通過SqlSessionFactoryBuilder().build(inputStream)得到。
    • SqlSession對應(yīng)JDBC的Connection灾前,也是非線程安全的防症,所以每次使用后必須關(guān)閉。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哎甲,一起剝皮案震驚了整個(gè)濱河市蔫敲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炭玫,老刑警劉巖奈嘿,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吞加,居然都是意外死亡裙犹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門衔憨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叶圃,“玉大人,你說我怎么就攤上這事巫财〉了疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵平项,是天一觀的道長赫舒。 經(jīng)常有香客問我悍及,道長,這世上最難降的妖魔是什么接癌? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任心赶,我火速辦了婚禮,結(jié)果婚禮上缺猛,老公的妹妹穿的比我還像新娘缨叫。我一直安慰自己,他們只是感情好荔燎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布耻姥。 她就那樣靜靜地躺著,像睡著了一般有咨。 火紅的嫁衣襯著肌膚如雪琐簇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天座享,我揣著相機(jī)與錄音婉商,去河邊找鬼。 笑死渣叛,一個(gè)胖子當(dāng)著我的面吹牛丈秩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淳衙,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蘑秽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滤祖?” 一聲冷哼從身側(cè)響起筷狼,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匠童,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塑顺,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汤求,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了严拒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扬绪。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裤唠,靈堂內(nèi)的尸體忽然破棺而出挤牛,到底是詐尸還是另有隱情,我是刑警寧澤种蘸,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布墓赴,位于F島的核電站竞膳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诫硕。R本人自食惡果不足惜坦辟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望章办。 院中可真熱鬧锉走,春花似錦、人聲如沸藕届。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休偶。三九已至梁厉,卻和暖如春隔心,著一層夾襖步出監(jiān)牢的瞬間赂毯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工株憾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庇麦,地道東北人计技。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像山橄,于是被迫代替她去往敵國和親垮媒。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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

  • 1. 簡介 1.1 什么是 MyBatis 航棱? MyBatis 是支持定制化 SQL睡雇、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,516評論 0 4
  • MyBatis是一個(gè)可以自定義SQL、存儲過程和高級映射的持久層框架饮醇。MyBatis 摒除了大部分的JDBC代碼它抱、...
    七寸知架構(gòu)閱讀 6,704評論 6 56
  • 什么是mybatis MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架朴艰。MyBatis...
    seadragonnj閱讀 2,330評論 0 7
  • 寒假開學(xué)在即观蓄,我腦海里不斷地響起畢淑敏老師的一句話:我不喜歡一個(gè)苦孩子求學(xué)的故事,家庭十分困難祠墅,父親逝去侮穿,弟妹嗷嗷...
    被愛ba閱讀 547評論 0 1
  • 食指中指無名指并攏,小拇指壓拇指毁嗦,這就是秋水誓亲茅。 五指受不同的肌腱控制,所以,能做秋水誓的人不多克锣。 今天這倆好基友...
    舒航2018閱讀 221評論 0 0