MyBatis學(xué)習(xí)之初窺門徑

一些術(shù)語

POJO(Plain Ordinary Java Object)簡單的Java對象
ORM:Object Relational Mapping,對象關(guān)系映射
JDBC:Java Data Base Connectivity

JDBC和MyBatis

JDBC是由Sun公司提出的規(guī)范朴皆,用于Java和數(shù)據(jù)庫之間的連接。它只是一系列接口,各數(shù)據(jù)庫廠商負(fù)責(zé)具體的實現(xiàn)。
通過JDBC對數(shù)據(jù)庫進(jìn)行操作通常需要幾步,以查詢?yōu)槔?/p>

  • 注冊驅(qū)動提供數(shù)據(jù)庫信息并得到一個Connection對象
  • 通過Connection得到Statement對象
  • 執(zhí)行SQL語句占遥,獲得結(jié)果集
  • 操作結(jié)果集得到相應(yīng)數(shù)據(jù)轉(zhuǎn)化為具體的POJO對象
  • 關(guān)閉相關(guān)資源

可見,通過JDBC操作數(shù)據(jù)庫非常復(fù)雜,工作量較大愚臀。于是出現(xiàn)了ORM模型,ORM是一種數(shù)據(jù)庫表和POJO的映射模型矾利,ORM模型使得程序員集中精力于代碼的編寫姑裂,Hibernate是一種典型的ORM框架,它提供了一種全表映射男旗,不用程序員自己編寫SQL語句舶斧,其余相關(guān)知識在此不在贅述。MyBatis是另外一種ORM模型察皇,它提供了一種比hibernate更加靈活的方式茴厉。

MyBatis核心組件

SqlSessionFactoryBuilder:根據(jù)配置信息生成SqlSessionFactory
SqlSessionFactory:一個接口泽台,用于生成SqlSession
SqlSession:發(fā)送SQL去執(zhí)行,也可以得到Mapper
Mapper:用于發(fā)送SQL執(zhí)行矾缓,并返回結(jié)果怀酷。
如圖:


這里寫圖片描述

構(gòu)建SqlSessionFactory

我們有兩種方式得到SqlSessionFactory,一種是通過XML文件方式嗜闻,另一種是通過代碼方式蜕依。通過XML方式得到SqlSessionFactory如下:

<?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>
<!-- 數(shù)據(jù)庫相關(guān)信息 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/wechatrobot"/>
        <property name="username" value="root"/>
      </dataSource>
    </environment>
  </environments>

<!--定義映射器-->
  <mappers>
    <mapper resource="config/sqlconfig/Message.xml"/>
  </mappers>

</configuration>
// 通過配置文件得到SqlSessionFactory,并得到SqlSession
public SqlSession getSqlSession() throws IOException{
         String resources = "config/Configuration.xml";
         SqlSession sqlSession = null;
         Reader reader = Resources.getResourceAsReader(resources);
         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
         sqlSession = sqlSessionFactory.openSession();
         return sqlSession;
}

映射器

我們有兩種方式得到映射器琉雳,一種是XML文件方式笔横,一種是通過注解。

XML
注解

一個簡單的例子

下邊這個例子不通過映射器直接通過SQL ID加參數(shù)發(fā)送SQL并執(zhí)行咐吼。
Mapper配置文件:

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="Message">
// 返回類型
  <resultMap type="model.Message" id="MessageResult">
    <id column="id" jdbcType="INTEGER" property="id"/>
    <result column="command" jdbcType="VARCHAR" property="command"/>
    <result column="description" jdbcType="VARCHAR" property="description"/>
    <result column="content" jdbcType="VARCHAR" property="content"/>
  </resultMap>
  
  <!--查詢語句-->
  <!--&#45;&#45;     // ONGI表達(dá)式-->
  <select id="queryList" parameterType="model.Message" resultMap="MessageResult">
    select id,command,description,content from message where 1=1
  </select>

    <!--// 刪除指定列-->
    <delete id="deleteOne" parameterType="int" >
        DELETE FROM message WHERE id=#{_parameter}
    </delete>
</mapper>

查詢代碼:

public List<Message> queryList(String command, String description) {
        DbAccess dbAccess = new DbAccess();
        List<Message> messageList = new ArrayList<>();
        try {
        // 這個請查閱上一節(jié)得到SQLSession的代碼
            SqlSession sqlSession = dbAccess.getSqlSession();
            
            Message message = new Message();
            message.setCommand(command);
            message.setDescription(description);
//            只能有一個參數(shù)吹缔,故用message包裝參數(shù)
// 直接通過SQL ID加參數(shù)發(fā)送SQL語句
            messageList = sqlSession.selectList("Message.queryList",message);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return messageList;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锯茄,隨后出現(xiàn)的幾起案子厢塘,更是在濱河造成了極大的恐慌,老刑警劉巖肌幽,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晚碾,死亡現(xiàn)場離奇詭異,居然都是意外死亡喂急,警方通過查閱死者的電腦和手機(jī)格嘁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廊移,“玉大人糕簿,你說我怎么就攤上這事〗瓶祝” “怎么了懂诗?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苗膝。 經(jīng)常有香客問我殃恒,道長,這世上最難降的妖魔是什么辱揭? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任离唐,我火速辦了婚禮,結(jié)果婚禮上问窃,老公的妹妹穿的比我還像新娘亥鬓。我一直安慰自己,他們只是感情好泡躯,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布贮竟。 她就那樣靜靜地躺著丽焊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咕别。 梳的紋絲不亂的頭發(fā)上技健,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音惰拱,去河邊找鬼雌贱。 笑死,一個胖子當(dāng)著我的面吹牛偿短,可吹牛的內(nèi)容都是我干的欣孤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼昔逗,長吁一口氣:“原來是場噩夢啊……” “哼降传!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勾怒,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤婆排,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笔链,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體段只,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年鉴扫,在試婚紗的時候發(fā)現(xiàn)自己被綠了赞枕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坪创,死狀恐怖炕婶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情误堡,我是刑警寧澤古话,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锁施,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杖们。R本人自食惡果不足惜悉抵,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摘完。 院中可真熱鬧姥饰,春花似錦、人聲如沸孝治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岂座,卻和暖如春态蒂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背费什。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工钾恢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸳址。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓瘩蚪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稿黍。 傳聞我的和親對象是個殘疾皇子疹瘦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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