MyBatis四大核心概念

<article class="post-content" style="box-sizing: border-box; display: block;">

yBatis 作為互聯(lián)網(wǎng)數(shù)據(jù)庫映射工具界的“上古神器”,訓(xùn)有四大“神獸”墅茉,謂之:SqlSessionFactoryBuilder命黔、SqlSessionFactory、SqlSession就斤、Mapper悍募。可以說洋机,了解了這四大核心搜立,便可知 MyBatis 八九。

SqlSessionFactoryBuilder

從命名上可以看出槐秧,這個(gè)是一個(gè) Builder 模式的,用于創(chuàng)建 SqlSessionFactory 的類忧设。SqlSessionFactoryBuilder 根據(jù)配置來構(gòu)造 SqlSessionFactory刁标。

其中配置方式有兩種

1. XML 文件方式

XML 文件方式是作為常用的一種方式:

String resource = "org/mybatis/example/mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

mybatis-config.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>
    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
        <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>
    <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

2. Java Config

這是第二種配置方式,通過 Java 代碼來配置:

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();

TransactionFactory transactionFactory = new JdbcTransactionFactory();

Environment environment = new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

Java Config 相比較 XML 文件的方式而言址晕,會(huì)有一些限制膀懈。比如修改了配置文件需要重新編譯,注解方式?jīng)]有 XML 配置項(xiàng)多等谨垃。所以启搂,業(yè)界大多數(shù)情況下是選擇 XML 文件的方式。但到底選擇哪種方式刘陶,這個(gè)要取決與自己團(tuán)隊(duì)的需要胳赌。比如,項(xiàng)目的 SQL 語句不復(fù)雜匙隔,也不需要一些高級的 SQL 特性疑苫,那么 Java Config 則會(huì)更加簡潔一點(diǎn);反之纷责,則可以選擇 XML 文件的方式捍掺。

SqlSessionFactory

SqlSessionFactory 顧名思義,是用于生產(chǎn) SqlSession 的工廠再膳。

通過如下的方式來獲取 SqlSession 實(shí)例:

SqlSession session = sqlSessionFactory.openSession();

SqlSession

SqlSession 包含了執(zhí)行 SQL 的所有的方法挺勿。以下是示例:

SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}

當(dāng)然,下面的方式可以做到類型安全:

SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}

Mapper

Mapper 顧名思義喂柒,是用做 Java 與 SQL 之間的映射的不瓶。包括了 Java 映射為 SQL 語句禾嫉,以及 SQL 返回結(jié)果映射為 Java。

比如湃番,下面是一個(gè)常見的 Mapper 接口映射文件:

<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>

其中 “org.mybatis.example.BlogMapper” 就是我們要射射的接口夭织,selectBlog 就是BlogMapper上的方法。而這個(gè) selectBlog 具體就是要執(zhí)行“select * from Blog where id = #{id}”這個(gè) SQL 語句吠撮。

這樣尊惰,我們就能通過

Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);

或者是

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

來獲取到執(zhí)行的結(jié)果。

當(dāng)然泥兰,如果是采用注解的方式的話弄屡,可以省去 XML 文件:

public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞋诗,隨后出現(xiàn)的幾起案子膀捷,更是在濱河造成了極大的恐慌,老刑警劉巖削彬,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件全庸,死亡現(xiàn)場離奇詭異,居然都是意外死亡融痛,警方通過查閱死者的電腦和手機(jī)壶笼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雁刷,“玉大人覆劈,你說我怎么就攤上這事∨胬” “怎么了责语?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長目派。 經(jīng)常有香客問我坤候,道長,這世上最難降的妖魔是什么企蹭? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任铐拐,我火速辦了婚禮匆光,結(jié)果婚禮上厕吉,老公的妹妹穿的比我還像新娘。我一直安慰自己均函,他們只是感情好螟凭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布虚青。 她就那樣靜靜地躺著,像睡著了一般螺男。 火紅的嫁衣襯著肌膚如雪棒厘。 梳的紋絲不亂的頭發(fā)上纵穿,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音奢人,去河邊找鬼谓媒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛何乎,可吹牛的內(nèi)容都是我干的句惯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼支救,長吁一口氣:“原來是場噩夢啊……” “哼抢野!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起各墨,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤指孤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贬堵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恃轩,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年黎做,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叉跛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡引几,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挽铁,到底是詐尸還是另有隱情伟桅,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布叽掘,位于F島的核電站楣铁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏更扁。R本人自食惡果不足惜盖腕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浓镜。 院中可真熱鬧溃列,春花似錦、人聲如沸膛薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哄啄。三九已至雅任,卻和暖如春风范,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沪么。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工硼婿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禽车。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓寇漫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哭当。 傳聞我的和親對象是個(gè)殘疾皇子猪腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

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

  • 1 Mybatis入門 1.1 單獨(dú)使用jdbc編程問題總結(jié) 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,307評論 0 38
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL钦勘、存儲(chǔ)過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評論 0 4
  • 1.1mybatis下載 mybaits 的代碼由github.com 管理陋葡,地址:https://github....
    暖熊熊閱讀 861評論 0 5
  • 一、歸并排序 歸并排序的思路 歸并排序是典型的分治算法彻采,把一個(gè)數(shù)組的排序腐缤,分為兩個(gè)子序列的排序,然后將兩個(gè)有序序列...
    mapleYe閱讀 3,503評論 0 2
  • 1月30日肛响,也就是上周六岭粤,中午給魚兒寶寶喂奶,一切都和往常一樣特笋,我正享受著著母女連接最緊密的時(shí)刻剃浇,突然劇痛襲來,呃...
    mogarly閱讀 277評論 0 0