【整理】Mybatis基礎(chǔ)使用專題

1 ? ?快速入門

1.1 ? ?準(zhǔn)備開發(fā)環(huán)境

1.1.1 創(chuàng)建工程項目

?1坤学、創(chuàng)建測試項目梗顺,普通java項目或者是JavaWeb項目均可舆乔,如下圖所示:

1.1.2 添加mybatis jar包

2羽氮、添加相應(yīng)的jar包

  【mybatis

??????  mybatis-3.1.1.jar

  【MYSQL驅(qū)動包】

    mysql-connector-java-5.1.7-bin.jar

1.1.3 創(chuàng)建數(shù)據(jù)庫表

3杨蛋、創(chuàng)建數(shù)據(jù)庫和表茎杂,針對MySQL數(shù)據(jù)庫

  SQL腳本如下:

create database mybatis;

use mybatis;

CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);

INSERT INTO users(NAME, age) VALUES('孤傲蒼狼',27);

INSERT INTO users(NAME, age)VALUES('白虎神皇',27);

  將SQL腳本在MySQL數(shù)據(jù)庫中執(zhí)行错览,完成創(chuàng)建數(shù)據(jù)庫和表的操作,如下:

  到此煌往,前期的開發(fā)環(huán)境準(zhǔn)備工作全部完成倾哺。

1.2 ? ?使用MyBatis查詢表中的數(shù)據(jù)

1.2.1 添加config.xml配置DataSource連接

  1、添加Mybatis的配置文件conf.xml

  在src目錄下創(chuàng)建一個conf.xml文件刽脖,如下圖所示:

  conf.xml文件中的內(nèi)容如下:

1.2.2 構(gòu)建映射數(shù)據(jù)庫表的dto對象

  2羞海、定義表所對應(yīng)的實體類,如下圖所示:

  

  User類的代碼如下:

package me.gacl.domain;

?/**

? *@authorgacl

? * users表所對應(yīng)的實體類

? ?*/

?public class User {

? ? ? //實體類的屬性和表的字段名稱一一對應(yīng)

? ? ?private int id;

? ? ?private String name;

? ? ?private int age;

? ? ?public int getId() {

? ? ? ? ?return id;

? ? ?}

? ? ?public void setId(int id) {

? ? ? ? ?this.id = id;

? ? ?}

? ? ?public String getName() {

? ? ? ? ?returnname;

? ? ?}

? ? ?public void setName(String name) {

? ? ? ? ?this.name = name;

? ? ?}

? ? ?public int getAge() {

? ? ? ? ?return age;

? ? ?}

? ? ?public void setAge(intage) {

? ? ? ? ?this.age = age;

? ? ?}

? ? ?@Override

? ? ?public String toString() {

? ? ? ? ?return"User [id=" + id + ",name=" + name + ", age=" + age + "]";

? ? ?}

}

1.2.3 定義操作數(shù)據(jù)庫表的sql映射文件

  3曲管、定義操作users表的sql映射文件userMapper.xml

  創(chuàng)建一個me.gacl.mapping包却邓,專門用于存放sql映射文件,在包中創(chuàng)建一個userMapper.xml文件翘地,如下圖所示:

  userMapper.xml文件的內(nèi)容如下:

1.2.4 在config.xml文件中注冊userMapper.xml文件

  4申尤、在conf.xml文件中注冊userMapper.xml文件

1.2.5 編寫測試代碼

  5癌幕、編寫測試代碼:執(zhí)行定義的select語句

  創(chuàng)建一個Test1類,編寫如下的測試代碼:

package me.gacl.test;

import java.io.IOException;

import java.io.InputStream;

import java.io.Reader;

import me.gacl.domain.User;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisTest1 {

??? public static void main(String[] args)throws IOException {

??????? //mybatis的配置文件

??????? String resource = "conf.xml";

??????? //使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)

??????? InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);

??????? //構(gòu)建sqlSession的工廠

???????SqlSessionFactory sessionFactory =new SqlSessionFactoryBuilder().build(is);

??????? //使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)

???????//Reader reader = Resources.getResourceAsReader(resource);

???????//構(gòu)建sqlSession的工廠

???????//SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(reader);

???????//創(chuàng)建能執(zhí)行映射文件中sql的sqlSession

??????? SqlSessionsession = sessionFactory.openSession();

??????? /**

????????*映射sql的標(biāo)識字符串昧穿,

????????* me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值勺远,

????????* getUser是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL

????????*/

??????? String statement= "me.gacl.mapping.userMapper.getUser";//映射sql的標(biāo)識字符串

???????//執(zhí)行查詢返回一個唯一user對象的sql

??????? User user =session.selectOne(statement, 1);

???????System.out.println(user);

??? }

}

  執(zhí)行結(jié)果如下:

  可以看到时鸵,數(shù)據(jù)庫中的記錄已經(jīng)成功查詢出來了胶逢。

2 ? 架構(gòu)分層

2.1 ? ?MyBatis架構(gòu)

MyBatis的框架架構(gòu)

原理詳解:

? ? ? ? MyBatis應(yīng)用程序根據(jù)XML配置文件創(chuàng)建SqlSessionFactory,SqlSessionFactory在根據(jù)配置饰潜,配置來源于兩個地方初坠,一處是配置文件,一處是Java代碼的注解彭雾,獲取一個SqlSession碟刺。SqlSession包含了執(zhí)行sql所需要的所有方法,可以通過SqlSession實例直接運(yùn)行映射的sql語句薯酝,完成對數(shù)據(jù)的增刪改查和事務(wù)提交等半沽,用完之后關(guān)閉SqlSession。

2.2 sql相關(guān)XML層

1吴菠、sql相關(guān)的xml層

配置數(shù)據(jù)都存在mybatis_base.xml文件中者填,此文件中存放引用到的所有mybatis sql.xml文件引用;


對于業(yè)務(wù)sql.xml編寫規(guī)則

mapper標(biāo)簽做葵,即映射器占哟,是Mybatis尋找數(shù)據(jù)庫語句文件的配置,同時用于指定Dao類的標(biāo)簽酿矢;

select標(biāo)簽榨乎,用于編寫Mybatis查詢語句;

#:用于防止sql注入瘫筐,直接表示字符串谬哀;

$:表示其他類型;

?????? CDATA:用于防止轉(zhuǎn)義严肪;

?????? foreach標(biāo)簽:for循環(huán)枚舉;

?????? parameterType

?????? resultType

2.2.1 select標(biāo)簽

select元素配置細(xì)節(jié)如下:

示例:

工程示例代碼:

2.2.2 sqlSessionFactory注冊

????在Spring的配置文件中谦屑,注入DataSource工廠方法類驳糯,用于關(guān)聯(lián)映射對應(yīng)mybatis的sql腳本xml文件。

2.3 ? ?Dao層

? ? ????Dao層需要注意的是——select id與Dao對應(yīng)類中的方法名必須保持一致氢橙;

? ? ?????注解@param酝枢,用于表示傳入?yún)?shù)的數(shù)據(jù)類型別名。@param與xml中的paramType屬性是二選一關(guān)系悍手,均用于指明入?yún)?shù)據(jù)類型帘睦;

packagecom.hj.app.dao;

public interface APPClientDao {

??? /**

??? ?*保存APP客戶端信息

??? ?*@param appClientInfo

??? ?*/

??? public void insertAPPClientInfo(@Param("info")APPClientInfo appInfo);

}

3 ? ?參考鏈接

MyBatis學(xué)習(xí)總結(jié)(一)——MyBatis快速入門

http://www.cnblogs.com/xdp-gacl/p/4261895.html

mybatis mapper接口原理(mybatis注解原理)

http://blog.csdn.net/shfqbluestone/article/details/52917270

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袍患,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竣付,更是在濱河造成了極大的恐慌诡延,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件古胆,死亡現(xiàn)場離奇詭異肆良,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逸绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門惹恃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棺牧,你說我怎么就攤上這事巫糙。” “怎么了颊乘?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵参淹,是天一觀的道長。 經(jīng)常有香客問我疲牵,道長承二,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任纲爸,我火速辦了婚禮亥鸠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘识啦。我一直安慰自己负蚊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布颓哮。 她就那樣靜靜地躺著家妆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冕茅。 梳的紋絲不亂的頭發(fā)上伤极,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音姨伤,去河邊找鬼金踪。 笑死百拓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屋剑,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼陵像,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起金顿,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲤桥,沒想到半個月后揍拆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芜壁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年礁凡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慧妄。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡顷牌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塞淹,到底是詐尸還是另有隱情窟蓝,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布饱普,位于F島的核電站运挫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏套耕。R本人自食惡果不足惜谁帕,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯袍。 院中可真熱鬧匈挖,春花似錦、人聲如沸康愤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽征冷。三九已至择膝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間检激,已是汗流浹背肴捉。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留叔收,地道東北人每庆。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像今穿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伦籍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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

  • 1. 簡介 1.1 什么是 MyBatis 蓝晒? MyBatis 是支持定制化 SQL腮出、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,453評論 0 4
  • 1 緩存介紹# MyBatis支持聲明式數(shù)據(jù)緩存(declarative data caching)。當(dāng)一條SQL...
    七寸知架構(gòu)閱讀 2,111評論 2 51
  • MyBatis是一個可以自定義SQL芝薇、存儲過程和高級映射的持久層框架胚嘲。MyBatis 摒除了大部分的JDBC代碼、...
    七寸知架構(gòu)閱讀 6,697評論 6 56
  • 以上是 先是程序員洛二,然后才是 iOS 程序員 — 寫給廣大非科班 iOS 開發(fā)者的一篇面試總結(jié) 中出現(xiàn)的題目馋劈,出于...
    天空中的球閱讀 1,316評論 0 27
  • 加入強(qiáng)框架 不要說什么沒關(guān)系呀 之類的
    CNBLUEone閱讀 155評論 0 0