mybatis

什么是mybatis

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射托修。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集挺勿。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息雇毫,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄玄捕。

我們的項目是通過maven管理的話,使用mybatis的時候棚放,需要引入mybatis依賴的包

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

mybatis的優(yōu)缺點

優(yōu)點

1枚粘、簡單易學(xué)
mybatis本身就很小且簡單。沒有任何第三方依賴飘蚯,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易于學(xué)習(xí)馍迄,易于使用,通過文檔和源代碼局骤,可以比較完全的掌握它的設(shè)計思路和實現(xiàn)攀圈。

2、靈活
mybatis不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計強加任何影響峦甩。 sql寫在xml里赘来,便于統(tǒng)一管理和優(yōu)化。通過sql基本上可以實現(xiàn)我們不使用數(shù)據(jù)訪問框架可以實現(xiàn)的所有功能凯傲,或許更多犬辰。

3、解除sql與程序代碼的耦合
通過提供DAL層冰单,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯分離幌缝,使系統(tǒng)的設(shè)計更清晰,更易維護诫欠,更易單元測試涵卵。sql和代碼的分離,提高了可維護性荒叼。

4轿偎、提供映射標(biāo)簽乱投,支持對象與數(shù)據(jù)庫的orm字段關(guān)系映射

5、提供對象關(guān)系映射標(biāo)簽托慨,支持對象關(guān)系組建維護

6尔苦、提供xml標(biāo)簽,支持編寫動態(tài)sql略荡。

7、不用寫dao實現(xiàn)

缺點

1、編寫SQL語句時工作量很大亦渗,尤其是字段多、關(guān)聯(lián)表多時汁尺,更是如此法精。

2、SQL語句依賴于數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫移植性差搂蜓,不能更換數(shù)據(jù)庫狼荞。

3、框架還是比較簡陋帮碰,功能尚有缺失相味,雖然簡化了數(shù)據(jù)綁定代碼,但是整個底層數(shù)據(jù)庫查詢實際還是要自己寫的殉挽,工作量也比較大丰涉,而且不太容易適應(yīng)快速數(shù)據(jù)庫修改。

4斯碌、二級緩存機制不佳

SqlSessionFactory

每個基于 MyBatis 的應(yīng)用都是以一個 SqlSessionFactory 的實例為中心的一死。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預(yù)先定制的 Configuration 的實例構(gòu)建出 SqlSessionFactory 的實例傻唾。
從 XML 文件中構(gòu)建 SqlSessionFactory 的實例非常簡單投慈,建議使用類路徑下的資源文件進行配置。但是也可以使用任意的輸入流(InputStream)實例策吠,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置逛裤。MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法猴抹,可使從 classpath 或其他位置加載資源文件更加容易带族。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactorysqlSessionFactory=
newSqlSessionFactoryBuilder().build(inputStream);

創(chuàng)建mybatis-config.xml文件

<!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"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/bank?useUnicode=true&characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

創(chuàng)建映射文件UserMapper.xml

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

  <mapper namespace="user">
    <select id="selectUser" resultType="com.hemi.mybatis.bean.User">
        select * from user where uid=1;
    </select>
  </mapper>

獲取xml配置文件

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

創(chuàng)建SqlSessionFactory

SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);

獲取SqlSession

SqlSession sqlSession = factory.openSession();

調(diào)用SqlSession的selectOne(命名空間.id名稱);

Object object = sqlSession.selectOne("user.selectUser");

關(guān)閉SqlSession

sqlSession.close();

mybatis-plus

<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>2.0.8</version>
</dependency>
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 自動掃描Mapping.xml文件 -->
        <property name="mapperLocations" value="classpath*:/mapper/*.xml"></property>
        <!--掃描實體類-->
        <property name="typeAliasesPackage" value="com.study.entity"/>
        <!--mybatis-plus全局配置-->
        <property name="globalConfig" ref="globalConfig"/>
    </bean>

    <!-- MP 全局配置 -->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <!--主鍵為自增長-->
        <property name="idType" value="0"/>
        <!--下劃線轉(zhuǎn)駝峰命名-->
        <property name="dbColumnUnderline" value="true"/>
    </bean>

    <!-- MyBatis 動態(tài)實現(xiàn)  -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 對Dao 接口動態(tài)實現(xiàn),需要知道接口在哪  -->
        <property name="basePackage" value="com.study.mapper"/>
    </bean>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟀给,一起剝皮案震驚了整個濱河市蝙砌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跋理,老刑警劉巖择克,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異前普,居然都是意外死亡肚邢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門骡湖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峻厚,“玉大人,你說我怎么就攤上這事浦夷。” “怎么了劈狐?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵懈息,是天一觀的道長。 經(jīng)常有香客問我怒见,道長姑宽,這世上最難降的妖魔是什么炮车? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮纪隙,結(jié)果婚禮上扛或,老公的妹妹穿的比我還像新娘。我一直安慰自己熙兔,他們只是感情好住涉,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布舆声。 她就那樣靜靜地躺著,像睡著了一般媳握。 火紅的嫁衣襯著肌膚如雪毙芜。 梳的紋絲不亂的頭發(fā)上争拐,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音隘冲,去河邊找鬼。 笑死奥邮,一個胖子當(dāng)著我的面吹牛罗珍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蘸朋,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼藕坯,長吁一口氣:“原來是場噩夢啊……” “哼噪沙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辐马,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤齐疙,失蹤者是張志新(化名)和其女友劉穎旭咽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轿塔,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡勾缭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年俩由,在試婚紗的時候發(fā)現(xiàn)自己被綠了癌蚁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兜畸。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡咬摇,死狀恐怖煞躬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情在扰,我是刑警寧澤雷客,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布佛纫,位于F島的核電站,受9級特大地震影響呈宇,放射性物質(zhì)發(fā)生泄漏甥啄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一穆桂、第九天 我趴在偏房一處隱蔽的房頂上張望融虽。 院中可真熱鬧,春花似錦般又、人聲如沸巍佑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倦卖。三九已至,卻和暖如春糖耸,著一層夾襖步出監(jiān)牢的瞬間嘉竟,已是汗流浹背洋侨。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工希坚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人个束。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓茬底,卻偏偏與公主長得像获洲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子最爬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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