2.平凡之路-初識(shí)MyBatis

MyBatis 是支持定制化 SQL元潘、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架馁菜。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對(duì)配置和原生Map使用簡(jiǎn)單的 XML 或注解最爬,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄涉馁。[來(lái)自官方文檔]

1.MyBatis的優(yōu)點(diǎn)和缺點(diǎn)

  • 優(yōu)點(diǎn)
    1. 易于上手和掌握。
    2. sql寫在xml里爱致,便于統(tǒng)一管理和優(yōu)化烤送。
    3. 解除sql與程序代碼的耦合。
    4. 提供映射標(biāo)簽糠悯,支持對(duì)象與數(shù)據(jù)庫(kù)的ORM字段關(guān)系映射
    5. 提供對(duì)象關(guān)系映射標(biāo)簽帮坚,支持對(duì)象關(guān)系組建維護(hù)
    6. 提供xml標(biāo)簽妻往,支持編寫動(dòng)態(tài)sql。
  • 缺點(diǎn)
    1. sql工作量很大试和,尤其是字段多讯泣、關(guān)聯(lián)表多時(shí),更是如此阅悍。
    2. sql依賴于數(shù)據(jù)庫(kù)好渠,導(dǎo)致數(shù)據(jù)庫(kù)移植性差。
    3. 由于xml里標(biāo)簽id必須唯一节视,導(dǎo)致DAO中方法不支持方法重載拳锚。[重點(diǎn)注意]
    4. 字段映射標(biāo)簽和對(duì)象關(guān)系映射標(biāo)簽僅僅是對(duì)映射關(guān)系的描述,具體實(shí)現(xiàn)仍然依賴于sql寻行。(比如配置了一對(duì)多Collection標(biāo)簽霍掺,如果sql里沒(méi)有join子表或查詢子表的話,查詢后返回的對(duì)象是不具備對(duì)象關(guān)系的拌蜘,即Collection的對(duì)象為null)
    5. DAO層過(guò)于簡(jiǎn)單杆烁,對(duì)象組裝的工作量較大。
    6. 不支持級(jí)聯(lián)更新拦坠、級(jí)聯(lián)刪除连躏。
    7. 編寫動(dòng)態(tài)sql時(shí),不方便調(diào)試,尤其邏輯復(fù)雜時(shí)贞滨。
    8. 提供的寫動(dòng)態(tài)sql的xml標(biāo)簽功能簡(jiǎn)單(連struts都比不上)入热,編寫動(dòng)態(tài)sql仍然受限,且可讀性低晓铆。
    9. 若不查詢主鍵字段勺良,容易造成查詢出的對(duì)象有“覆蓋”現(xiàn)象。
    10. 參數(shù)的數(shù)據(jù)類型支持不完善骄噪。(如參數(shù)為Date類型時(shí)尚困,容易報(bào)沒(méi)有g(shù)et、set方法链蕊,需在參數(shù)上加@param)
    11. 多參數(shù)時(shí)事甜,使用不方便,功能不夠強(qiáng)大滔韵。(目前支持的方法有map逻谦、對(duì)象、注解@param)
    12. 緩存使用不當(dāng)陪蜻,容易產(chǎn)生臟數(shù)據(jù)邦马。二級(jí)緩存機(jī)制不佳,需要使用第三方的緩存框架。

2.MyBatis安裝

首先我們需要聲明一下iBatis和MyBatis都是一個(gè)組織開(kāi)發(fā)滋将,只是版本不相同而已邻悬,就想我們學(xué)習(xí)的Java的版本命名規(guī)則類似,實(shí)際上MyBatis就是iBatis的一個(gè)大版本號(hào)的提升随闽。
下載地址:https://github.com/mybatis/mybatis-3/releases
官方文檔:http://www.mybatis.org/mybatis-3/

MyBatis解壓目錄說(shuō)明

3.MyBatis的環(huán)境搭建

(1) 新建Java項(xiàng)目

新建Java項(xiàng)目
  • 新建lib文件夾,導(dǎo)入mybatis-3.4.2.jar的框架核心包和MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包
  • 選中兩個(gè)Jar包,右鍵選擇Bulid Path

(2) 新建MyBatis核心配置文件

個(gè)人建議將核心配置文件建立在mybatis-config.xml文件

  • 新建核心xml文件
    需要設(shè)置文檔類型
<?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>

</configuration>
  • 配置數(shù)據(jù)源
    <!-- 配置數(shù)據(jù)庫(kù)環(huán)境 -->
    <environments default="development">
        <environment id="development">
            <!-- 事務(wù)管理器:保證數(shù)據(jù)的完整性和一致性 -->
            <!-- 框架:默認(rèn)情況下CUD操作需要手動(dòng)提交事務(wù) -->
            <transactionManager type="JDBC" />
            <!-- 使用的是連接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/cy42_mss" />
                <property name="username" value="root" />
                <property name="password" value="shxt" />
            </dataSource>
        </environment>
    </environments>

百度Java如何實(shí)行連接池的原理?

  • 配置加載映射文件
    <mappers>
        <mapper resource="com/shxt/model/ShxtMapper.xml"/>
    </mappers>
  • 附錄


    完整代碼

(3) 新建MyBatis映射文件

  • 位置建立: com/shxt/model/ShxtMapper.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="命名空間,唯一的不能重復(fù)"> -->
<mapper namespace="shxt.cy42.mss">
  
</mapper>

目前我們使用的傳統(tǒng)模式,那么namespace一般建議使用持久化類的全路徑com.shxt.model.User這樣的字符串保持一致,方便后面代碼處理.
但是,我們現(xiàn)在沒(méi)有持久化類,所以就是設(shè)置了一個(gè)簡(jiǎn)單的字符串

  • 定制SQL語(yǔ)句,簡(jiǎn)單測(cè)試
<!-- 定制SQL語(yǔ)句 -->
  <insert id="add01">
    INSERT INTO skill  (skill_name,num) VALUES ('JS',75)
  </insert>
  • 附錄


    映射文件代碼

(4) 測(cè)試代碼

public class API的調(diào)用過(guò)程演示 {
    public static void main( String[] args ) {
        //讀取核心配置文件的位置
        //InputStream is = Resources.getResourceAsStream("com/shxt/model/mybatis-config.xml");
        SqlSession sqlSession = null;
        try {
            //1.讀取核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.創(chuàng)建SqlSession工廠
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //3.獲取SqlSession 
            //****** SqlSession完成所有的持久化操作CRUD
            sqlSession = sqlSessionFactory.openSession();
            //4.關(guān)鍵步驟: 定位執(zhí)行SQL語(yǔ)句 重點(diǎn)重點(diǎn)重點(diǎn)
            //****如何定位  (namespace+"."+id)
            int row = sqlSession.insert("shxt.cy42.mss.add01");
            //5.針對(duì)于CUD操作需要手動(dòng)提交事務(wù)
            sqlSession.commit();
            System.out.println("影響的行數(shù):"+row);
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
            //6.關(guān)閉資源
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }

}
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末父丰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子橱脸,更是在濱河造成了極大的恐慌础米,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件添诉,死亡現(xiàn)場(chǎng)離奇詭異屁桑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栏赴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蘑斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人须眷,你說(shuō)我怎么就攤上這事竖瘾。” “怎么了花颗?”我有些...
    開(kāi)封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵捕传,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扩劝,道長(zhǎng)庸论,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任棒呛,我火速辦了婚禮聂示,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘簇秒。我一直安慰自己鱼喉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布趋观。 她就那樣靜靜地躺著扛禽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皱坛。 梳的紋絲不亂的頭發(fā)上旋圆,一...
    開(kāi)封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音麸恍,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抹沪,可吹牛的內(nèi)容都是我干的刻肄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼融欧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼敏弃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起噪馏,我...
    開(kāi)封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤麦到,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后欠肾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓶颠,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年刺桃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粹淋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瑟慈,死狀恐怖桃移,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葛碧,我是刑警寧澤借杰,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站进泼,受9級(jí)特大地震影響蔗衡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缘琅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一粘都、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刷袍,春花似錦翩隧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至雷酪,卻和暖如春淑仆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哥力。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工蔗怠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墩弯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓寞射,卻偏偏與公主長(zhǎng)得像渔工,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桥温,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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