Java框架篇---Mybatis 入門

作者:偶my耶
原文地址:http://www.cnblogs.com/oumyye/

Mybatis 入門

一今妄、Mybatis介紹
--
MyBatis是一款一流的支持自定義SQL鹉戚、存儲(chǔ)過程和高級(jí)映射的持久化框架至会。MyBatis幾乎消除了所有的JDBC代碼,也基本不需要手工去設(shè)置參數(shù)和獲取檢索結(jié)果。MyBatis能夠使用簡單的XML格式或者注解進(jìn)行來配置,能夠映射基本數(shù)據(jù)元素毛萌、Map接口和POJOs(普通java對(duì)象)到數(shù)據(jù)庫中的記錄。

二喝滞、MyBatis工作流程

(1)加載配置并初始化

  • 觸發(fā)條件:加載配置文件
  • 配置來源于兩個(gè)地方阁将,一處是配置文件,一處是Java代碼的注解右遭,將SQL的配置信息加載成為一個(gè)個(gè)MappedStatement對(duì)象(包括了傳入?yún)?shù)映射配置做盅、執(zhí)行的SQL語句缤削、結(jié)果映射配置),存儲(chǔ)在內(nèi)存中吹榴。

(2)接收調(diào)用請(qǐng)求

  • 觸發(fā)條件:調(diào)用Mybatis提供的API
  • 傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對(duì)象
  • 處理過程:將請(qǐng)求傳遞給下層的請(qǐng)求處理層進(jìn)行處理亭敢。

(3)處理操作請(qǐng)求 觸發(fā)條件:API接口層傳遞請(qǐng)求過來

  • 傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對(duì)象
  • 處理過程:
    (A)根據(jù)SQL的ID查找對(duì)應(yīng)的MappedStatement對(duì)象⊥汲铮  
    (B)根據(jù)傳入?yún)?shù)對(duì)象解析MappedStatement對(duì)象帅刀,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)≡妒#  
    (C)獲取數(shù)據(jù)庫連接劝篷,根據(jù)得到的最終SQL語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果民宿〗考耍  
    (D)根據(jù)MappedStatement對(duì)象中的結(jié)果映射配置對(duì)得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理,并得到最終的處理結(jié)果活鹰」。  
    (E)釋放連接資源。

(4)返回處理結(jié)果將最終的處理結(jié)果返回志群。

orm工具的基本思想
無論是用過的hibernate,mybatis,你都可以法相他們有一個(gè)共同點(diǎn):

  • 從配置文件(通常是XML配置文件中)得到 sessionfactory.
  • sessionfactory 產(chǎn)生 session
  • session 中完成對(duì)數(shù)據(jù)的增刪改查和事務(wù)提交等.
  • 在用完之后關(guān)閉session 着绷。
  • 在java 對(duì)象和 數(shù)據(jù)庫之間有做mapping 的配置文件,也通常是xml 文件锌云。

功能架構(gòu)

功能架構(gòu)

Mybatis的功能架構(gòu)分為三層:

  1. API接口層:提供給外部使用的接口API荠医,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層一接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理桑涎。
  2. 數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找彬向、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等攻冷。它主要的目的是根據(jù)調(diào)用的請(qǐng)求完成一次數(shù)據(jù)庫操作娃胆。
  3. 基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理等曼、事務(wù)管理里烦、配置加載和緩存處理,這些都是共用的東西禁谦,將他們抽取出來作為最基礎(chǔ)的組件胁黑。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。

多需要添加的驅(qū)動(dòng)包:


添加驅(qū)動(dòng)包

下面進(jìn)行快速入門:
目錄如下:


目錄

實(shí)體類User
package com.oumyye.model;
public class User { 
       private String id; 
       private String name; 
       private int age; 
       public String getId() { 
           return id; 
        } 
public void setId(String id) { 
           this.id = id; 
        } 
public String getName() { 
           return name; 
        } 
public void setName(String name) { 
           this.name = name; 
        } 
public int getAge() { 
           return age; 
        } 
public void setAge(int age) { 
           this.age = age; 
        } 
@Override 
public String toString() { 
           return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 
        }
}

映射文件UserMapping.xml

<?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="com.oumyye.mapping.UserMapping"> 
    <!-- 在select標(biāo)簽中編寫查詢的SQL語句州泊, 設(shè)置select標(biāo)簽的id屬性為getUser丧蘸,id屬性值必須是唯一的,不能夠重復(fù) 
    使用parameterType屬性指明查詢時(shí)使用的參數(shù)類型拥诡,resultType屬性指明查詢返回的結(jié)果集類型                    
    resultType="com.oumyye.model.User"就表示將查詢結(jié)果封裝成一個(gè)User類的對(duì)象返回 
    User類就是users表所對(duì)應(yīng)的實(shí)體類 
    --> 
    <!-- 
    根據(jù)id查詢得到一個(gè)user對(duì)象 
    --> 
    <select id="getUser" parameterType="String" 
        resultType="com.oumyye.model.User"> 
        select * from user where id=#{id} 
    </select>
</mapper>

資源文件mybatis.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" /> 
            <!-- 配置數(shù)據(jù)庫連接信息 --> 
            <dataSource type="POOLED"> 
                <property name="driver" value="com.mysql.jdbc.Driver" /> 
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> 
                <property name="username" value="root" /> 
                <property name="password" value="root" /> 
            </dataSource> 
          </environment> 
        </environments> 
        <mappers> 
            <mapper resource="com/oumyye/mapping/userMapping.xml"/> 
        </mappers>
</configuration>

測試類:

package test;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.oumyye.model.User;

public class Tests { 
    @Test 
    public void test(){ 
         String resource = "mybatis.xml"; 
         //使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件) 
         InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource); 
         //構(gòu)建sqlSession的工廠 
         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); 

         SqlSession session = sessionFactory.openSession(); 
         /** 
          * 映射sql的標(biāo)識(shí)字符串触趴, 
          * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值氮发, 
          * getUser是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL  
          */ 
          String statement = "com.oumyye.mapping.UserMapping.getUser";//映射sql的標(biāo)識(shí)字符串 //執(zhí)行查詢返回一個(gè)唯一user對(duì)象的sql 
          User user = session.selectOne(statement, "1123"); 
          System.out.println(user.toString()); 
     }
}

結(jié)果:


結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冗懦,一起剝皮案震驚了整個(gè)濱河市爽冕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌披蕉,老刑警劉巖颈畸,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異没讲,居然都是意外死亡眯娱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門爬凑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徙缴,“玉大人,你說我怎么就攤上這事嘁信∮谘” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵潘靖,是天一觀的道長穿剖。 經(jīng)常有香客問我,道長卦溢,這世上最難降的妖魔是什么糊余? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮单寂,結(jié)果婚禮上贬芥,老公的妹妹穿的比我還像新娘。我一直安慰自己凄贩,他們只是感情好誓军,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布袱讹。 她就那樣靜靜地躺著疲扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捷雕。 梳的紋絲不亂的頭發(fā)上椒丧,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音救巷,去河邊找鬼壶熏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浦译,可吹牛的內(nèi)容都是我干的棒假。 我是一名探鬼主播溯职,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼帽哑!你這毒婦竟也來了谜酒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤妻枕,失蹤者是張志新(化名)和其女友劉穎僻族,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡谐,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡述么,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愕掏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片度秘。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饵撑,靈堂內(nèi)的尸體忽然破棺而出敷钾,到底是詐尸還是另有隱情,我是刑警寧澤肄梨,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布阻荒,位于F島的核電站,受9級(jí)特大地震影響众羡,放射性物質(zhì)發(fā)生泄漏侨赡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一粱侣、第九天 我趴在偏房一處隱蔽的房頂上張望羊壹。 院中可真熱鬧,春花似錦齐婴、人聲如沸油猫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽情妖。三九已至,卻和暖如春诱担,著一層夾襖步出監(jiān)牢的瞬間毡证,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蔫仙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料睛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像恤煞,于是被迫代替她去往敵國和親屎勘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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

  • 1. 簡介 1.1 什么是 MyBatis 居扒? MyBatis 是支持定制化 SQL挑秉、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,518評(píng)論 0 4
  • 1 引言# 本文主要講解JDBC怎么演變到Mybatis的漸變過程,重點(diǎn)講解了為什么要將JDBC封裝成Mybait...
    七寸知架構(gòu)閱讀 76,461評(píng)論 36 980
  • Java數(shù)據(jù)持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 4,914評(píng)論 0 16
  • 還有半個(gè)小時(shí)今天就要結(jié)束了苔货,七年的時(shí)間轉(zhuǎn)瞬即逝犀概,記得七年前的今天,點(diǎn)滴都浮于心上夜惭,你們那么小姻灶,那么弱,以至于一出生...
    息烽閱讀 128評(píng)論 0 0
  • 從奶奶家出來诈茧,天已蒙蒙亮产喉。我們幾個(gè)堂兄弟姐妹一起到親人家挨家去拜年,說著敢会,笑著曾沈,鬧著。 鄰居們看到往往會(huì)感嘆鸥昏,這幾...
    牛佳閱讀 239評(píng)論 2 1