MyBatis入門

什么是 MyBatis 孽糖?

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL毅贮、存儲(chǔ)過程以及高級(jí)映射办悟。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡(jiǎn)單的 XML 或注解來配置和映射原生信息滩褥,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄病蛉。

Maven配置

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

關(guān)鍵類

SqlSessionFactory

每個(gè)基于 MyBatis 的應(yīng)用都是以一個(gè) SqlSessionFactory 的實(shí)例為中心的。SqlSessionFactory的實(shí)例可以通過 SqlSessionFactoryBuilder 獲得瑰煎。而 SqlSessionFactoryBuilder則可以從 XML 配置文件或一個(gè)預(yù)先定制的 Configuration 的實(shí)例構(gòu)建出 SqlSessionFactory 的實(shí)例铺然。
XML 配置文件(configuration XML)中包含了對(duì) MyBatis 系統(tǒng)的核心設(shè)置,包含獲取數(shù)據(jù)庫(kù)連接實(shí)例的數(shù)據(jù)源(DataSource)和決定事務(wù)作用域和控制方式的事務(wù)管理器(TransactionManager)酒甸。

<?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>

從 SqlSessionFactory 中獲取 SqlSession

既然有了 SqlSessionFactory 魄健,顧名思義,我們就可以從中獲得 SqlSession 的實(shí)例了插勤。SqlSession 完全包含了面向數(shù)據(jù)庫(kù)執(zhí)行 SQL 命令所需的所有方法沽瘦。你可以通過 SqlSession 實(shí)例來直接執(zhí)行已映射的 SQL 語(yǔ)句。例如:

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

每個(gè)線程都應(yīng)該有它自己的 SqlSession 實(shí)例农尖。SqlSession 的實(shí)例不是線程安全的析恋,因此是不能被共享的,所以它的最佳的作用域是請(qǐng)求或方法作用域盛卡。絕對(duì)不能將 SqlSession 實(shí)例的引用放在一個(gè)類的靜態(tài)域助隧,甚至一個(gè)類的實(shí)例變量也不行。也絕不能將 SqlSession 實(shí)例的引用放在任何類型的管理作用域中窟扑,比如 Servlet 架構(gòu)中的 HttpSession喇颁。如果你現(xiàn)在正在使用一種 Web 框架,要考慮 SqlSession 放在一個(gè)和 HTTP 請(qǐng)求對(duì)象相似的作用域中嚎货。換句話說橘霎,每次收到的 HTTP 請(qǐng)求,就可以打開一個(gè) SqlSession殖属,返回一個(gè)響應(yīng)姐叁,就關(guān)閉它。這個(gè)關(guān)閉操作是很重要的洗显,你應(yīng)該把這個(gè)關(guān)閉操作放到finally 塊中以確保每次都能執(zhí)行關(guān)閉外潜。下面的示例就是一個(gè)確保 SqlSession 關(guān)閉的標(biāo)準(zhǔn)模式:
優(yōu)秀實(shí)踐

SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // do work
} finally {
  session.close();
}

引用
MyBatis 入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挠唆,隨后出現(xiàn)的幾起案子处窥,更是在濱河造成了極大的恐慌,老刑警劉巖玄组,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滔驾,死亡現(xiàn)場(chǎng)離奇詭異谒麦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哆致,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門绕德,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摊阀,你說我怎么就攤上這事耻蛇。” “怎么了胞此?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵臣咖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我豌鹤,道長(zhǎng)亡哄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任布疙,我火速辦了婚禮,結(jié)果婚禮上愿卸,老公的妹妹穿的比我還像新娘灵临。我一直安慰自己,他們只是感情好趴荸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布儒溉。 她就那樣靜靜地躺著,像睡著了一般发钝。 火紅的嫁衣襯著肌膚如雪顿涣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天酝豪,我揣著相機(jī)與錄音涛碑,去河邊找鬼。 笑死孵淘,一個(gè)胖子當(dāng)著我的面吹牛蒲障,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘫证,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揉阎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了背捌?” 一聲冷哼從身側(cè)響起毙籽,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毡庆,沒想到半個(gè)月后坑赡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烙如,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年垮衷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厅翔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搀突,死狀恐怖刀闷,靈堂內(nèi)的尸體忽然破棺而出瞳遍,到底是詐尸還是另有隱情复凳,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布舔清,位于F島的核電站徐许,受9級(jí)特大地震影響施蜜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雌隅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一翻默、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恰起,春花似錦修械、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吨枉,卻和暖如春蹦渣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背貌亭。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工柬唯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人属提。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓权逗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親冤议。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斟薇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355