MyBatis框架

一储耐、什么是MyBatis?

MyBatis是一個優(yōu)秀的持久層框架揍诽,它對jdbc的操作數據庫的過程進行封裝籽慢,使開發(fā)者只需要關注 SQL 本身,而不需要花費精力去處理例如注冊驅動、創(chuàng)建connection维咸、創(chuàng)建statement、手動設置參數贱呐、結果集檢索等jdbc繁雜的過程代碼。
Mybatis通過xml或注解的方式將要執(zhí)行的各種statement(statement暑塑、preparedStatemnt)配置起來吼句,并通過java對象和statement中的sql進行映射生成最終執(zhí)行的sql語句锅必,最后由mybatis框架執(zhí)行sql并將結果映射成java對象并返回事格。

框架圖

二、它相對JDBC的好處

1搞隐、使用傳統方式JDBC訪問數據庫:

(1)使用JDBC訪問數據庫有大量重復代碼(比如注冊驅動驹愚、獲取連接、獲取傳輸器劣纲、釋放資源等)
(2)JDBC自身沒有連接池逢捺,會頻繁的創(chuàng)建連接和關閉連接,效率低
(3)SQL是寫死在程序中癞季,一旦修改SQL劫瞳,需要對類重新編譯倘潜。
(4)對查詢SQL執(zhí)行后返回的ResultSet對象,需要手動處理志于,有時會特別麻煩

2涮因、使用mybatis框架訪問數據庫:

(1)Mybatis對JDBC對了封裝,可以簡化JDBC代碼伺绽。
(2)Mybatis支持連接池(也可以配置其他的連接池)养泡,因此可以提高程序的效率
(3)Mybatis是將SQL配置在mapper文件中,修改SQL只是修改配置文件奈应,類不需要重新編譯澜掩。
(4)對查詢SQL執(zhí)行后返回的ResultSet對象,Mybatis會幫我們處理杖挣,轉換成Java對象肩榕。

三、使用MyBatis過程

1.我們先準備一個數據庫惩妇,創(chuàng)建表和數據(員工表emp)
2.創(chuàng)建工程点把,導入所需jar包、創(chuàng)建測試類
3.導入mysql驅動包
4.引用所有jar包( build path)
5.創(chuàng)建com.aaa.test.TestMybatis測試類屿附,并提供findAll方法(查詢emp表中所有的員工信息)
6.添加sqlMapConfig.xml文件
--1郎逃、在src目錄下,創(chuàng)建sqlMapConfig.xml文件 (MyBatis的核心配置文件)
--2挺份、sqlMapConfig文件頭信息如下:

<?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">
     <!-- MyBatis的全局配置文件 -->
     <configuration >
   
    </configuration>

7.編寫Emp實體類
--實現Emp類: 提供私有屬性以及對應的getter方法褒翰、setter方法,并重寫toString方法
8.添加EmpMapper.xml文件**

--1匀泊、在src/com/aaa/pojo目錄下优训,創(chuàng)建EmpMapper.xml文件(實體類的映射文件)
--2、EmpMapper.xml文件配置如下:

EmpMapper文件頭信息如下:

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

<!--

namespace一般指定為當前文件的所在包路徑+文件名(將來是接口名)

在程序中通過[ **namespace**+ **id** ]定位到執(zhí)行哪一條SQL語句

 -->

<mapper namespace=*""*>

</mapper>

9.實現測試類,并測試

public void findAll() throws IOException{
    //1.讀取sqlMapConfig.xml文件各聘,獲取連接數據庫的基本信息
    InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
    //2.創(chuàng)建SqlSessionFactory工廠對象揣非, 
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    //3.通過工廠獲取一個SqlSession對象(用于執(zhí)行SQL及返回結果)
    SqlSession session = factory.openSession();
    //4.執(zhí)行查詢操作,查詢emp表中的所有記錄
    String sqlId = "com.aaa.pojo.EmpMapper.findAll";
    List<Emp> emplist = session.selectList( sqlId );
    //5.打印list集合
    for(Emp emp : emplist){
        System.out.println(emp);
    }
}

**由于這次使用數據都需要用到上述前三個過程躲因,因此我們可以把其抽取出來**


private SqlSessionFactory factory;
    private SqlSession session = null;
    //Before 在每次執(zhí)行@Test方法之前都會執(zhí)行
    //當前這個方法
    @Before
    public void init() throws Exception {
        //1. 讀取sqlMapConfig.xml文件早敬,獲取配置信息
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2. 通過配置信息,創(chuàng)建一個sqlSessionFactory對象
        factory = new SqlSessionFactoryBuilder().build(in);
        //3. 通過工廠獲取selSession對象
        session = factory.openSession();
    }

四大脉、MyBatis入門細節(jié)

1搞监、pojo(Plain Ordinary Java Object): 簡單的Java對象,實際就是普通JavaBean镰矿,也叫做實體類琐驴,用于封裝一類信息。例如:提供Emp類,用于封裝和用戶相關的屬性信息绝淡,比如id員工編號宙刘、name員工姓名、job員工職位牢酵、salary薪資等荐类。再例如:提供Product類,用于封裝和商品相關的屬性信息茁帽,比如id商品編號玉罐、name商品名稱、price單價等潘拨。
而屬性一般是私有的吊输,因此我們還會提供屬性相關的setter和getter方法。
我們一般會把實體類铁追,放在pojo目錄下季蚂,而和實體類相關的mapper文件,也放在相同的目錄下(Maven工程除外)

2琅束、EmpMapper.xml:Emp實體類的映射文件扭屁,和Emp類放在同一目錄下(Maven工程除外)

3、sqlMapConfig.xml:mybatis的全局配置文件涩禀,很多配置信息都會在這里進行配置料滥,比如事務、連接數據庫基本信息艾船,連接池(數據源)等配置

4葵腹、lib及下的jar包:將所需jar包拷貝過來后,還需要引用jar包到工程屿岂,也就是選中jar包践宴,右鍵 --> Build Path --> Add to Build Path即可!

五、錯誤信息

例如:

### Error querying database.  Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.aaa.pojo.EmpMapper.findAll'.  It's likely that neither a Result Type nor a Result Map was specified.
### The error may exist in com/aaa/pojo/EmpMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select * from emp

修改錯誤:com/aaa/pojo/EmpMapper.xml中的r.findAll的resultType信息出錯爷怀。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末阻肩,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子运授,更是在濱河造成了極大的恐慌烤惊,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徒坡,死亡現場離奇詭異撕氧,居然都是意外死亡瘤缩,警方通過查閱死者的電腦和手機喇完,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锦溪,你說我怎么就攤上這事不脯。” “怎么了刻诊?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵防楷,是天一觀的道長。 經常有香客問我则涯,道長复局,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任粟判,我火速辦了婚禮亿昏,結果婚禮上,老公的妹妹穿的比我還像新娘档礁。我一直安慰自己角钩,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布呻澜。 她就那樣靜靜地躺著递礼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羹幸。 梳的紋絲不亂的頭發(fā)上脊髓,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音栅受,去河邊找鬼供炼。 笑死,一個胖子當著我的面吹牛窘疮,可吹牛的內容都是我干的袋哼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼闸衫,長吁一口氣:“原來是場噩夢啊……” “哼涛贯!你這毒婦竟也來了?” 一聲冷哼從身側響起蔚出,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤弟翘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骄酗,有當地人在樹林里發(fā)現了一具尸體稀余,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年趋翻,在試婚紗的時候發(fā)現自己被綠了睛琳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖师骗,靈堂內的尸體忽然破棺而出历等,到底是詐尸還是另有隱情,我是刑警寧澤辟癌,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布寒屯,位于F島的核電站,受9級特大地震影響黍少,放射性物質發(fā)生泄漏寡夹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一厂置、第九天 我趴在偏房一處隱蔽的房頂上張望要出。 院中可真熱鬧,春花似錦农渊、人聲如沸患蹂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽传于。三九已至,卻和暖如春醉顽,著一層夾襖步出監(jiān)牢的瞬間沼溜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工游添, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留系草,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓唆涝,卻偏偏與公主長得像找都,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子廊酣,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • 1 Mybatis入門 1.1 單獨使用jdbc編程問題總結 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,295評論 0 38
  • MyBatis 是一款優(yōu)秀的持久層框架能耻,它支持定制化 SQL(靈活)、存儲過程(PLSQL模塊化的組件亡驰,數據庫的一...
    G_慧慧閱讀 282評論 0 0
  • MyBatis 是一款優(yōu)秀的持久層框架晓猛,它支持定制化 SQL(靈活)、存儲過程(PLSQL模塊化的組件凡辱,數據庫的一...
    極課編程閱讀 1,157評論 0 18
  • Mybatis 創(chuàng)建數據庫 Mybatis框架原理(掌握) 1戒职、Mybatis 是什么? Mybatis 是一個持...
    __元昊__閱讀 362評論 0 0
  • 一七令 . 緣 緣透乾, 浪漫洪燥,嬌妍磕秤。 花似夢,雨如煙蚓曼。 相遇無意亲澡,知交有源钦扭。 撫琴浮綠水纫版,吹笛踏青山。 杯酒縱歌欲醉...
    不語不問閱讀 858評論 0 3