Mybatis

什么是MyBatis

MyBatis是支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架.MyBitis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置及對(duì)結(jié)果的檢索.MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Object ,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄.

入門

每個(gè)MyBatis的應(yīng)用程序都以一個(gè)SQLSessionFactory對(duì)象的實(shí)例為核心.SQLSessionFactory對(duì)象的實(shí)例可以通過(guò)SqlSessionFactory對(duì)象來(lái)獲得.SqlSessionFactory對(duì)象可以通過(guò)XML配置文件,或從以往使用慣例中準(zhǔn)備好的Configuration類實(shí)例中來(lái)構(gòu)建SQLSessionFactory對(duì)象.

Mybatis-Spring

http://www.mybatis.org/spring/zh/index.html
在MyBatis的github官網(wǎng)(https://github.com/mybatis/spring)中有一個(gè)叫MyBatis Spring Adapter(MyBatis-Spring)的庫(kù),暫且翻譯成:MyBatis Spring適配器,它的作用是:原話:“MyBatis-Spring adapter is an easy-to-use Spring3 bridge for MyBatis sql mapping framework.”什乙,就是了為更容易的將MyBatis與Spring整合制恍,充分發(fā)揮二兩結(jié)合的優(yōu)勢(shì),它相當(dāng)于一個(gè)橋宽菜。
MyBatis-Spring會(huì)幫助你將MyBatis代碼無(wú)縫地整合到Spring中谣膳。使用這個(gè)類庫(kù)中的類,Spring將會(huì)加載必要的MyBatis工廠類和session類。這個(gè)類庫(kù)也提供一個(gè)簡(jiǎn)單的方式來(lái)注入MyBatis數(shù)據(jù)映射器和SqlSession到業(yè)務(wù)層的bean中铅乡。而且它也會(huì)處理事務(wù),翻譯MyBatis的異常到Spring的DataAccessException異常(數(shù)據(jù)訪問(wèn)異常,譯者注)中继谚。最終,它并不會(huì)依賴于MyBatis,Spring或MyBatis-Spring來(lái)構(gòu)建應(yīng)用程序代碼阵幸。

pom.xml文件中添加依賴項(xiàng)花履,除了Spring的基本依賴之外:

        <!-- MyBatis Dependency Begin -->
        <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.2.2</version>
        </dependency>
        <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis-spring</artifactId>
              <version>1.2.0</version>
        </dependency>
        <!-- MyBatis Dependency End -->

Spring配置文件如下:

     <!-- 讀入配置屬性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 基于Druid數(shù)據(jù)庫(kù)鏈接池的數(shù)據(jù)源配置 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本屬性driverClassName、 url挚赊、user臭挽、password -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!-- 配置初始化大小、最小咬腕、最大 -->
        <!-- 通常來(lái)說(shuō)欢峰,只需要修改initialSize、minIdle涨共、maxActive -->
        <property name="initialSize" value="2"/>
        <property name="minIdle" value="2"/>
        <property name="maxActive" value="30"/>
        <property name="testWhileIdle" value="false"/>
    </bean>
    <!-- 將數(shù)據(jù)源映射到sqlSessionFactory中 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- SqlSession模板類實(shí)例 -->
    <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

Mybatis的配置文件mybatis-config.xml纽帖,此配置文件中的值也可以在上面SqlSessionFactoryBean進(jìn)行屬性注入:

<configuration>
    <settings>
        <!-- 這個(gè)配置使全局的映射器啟用或禁用 緩存 -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局啟用或禁用延遲加載。當(dāng)禁用時(shí), 所有關(guān)聯(lián)對(duì)象都會(huì)即時(shí)加載 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 允許或不允許多種結(jié)果集從一個(gè)單獨(dú) 的語(yǔ)句中返回(需要適合的驅(qū)動(dòng)) -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 使用列標(biāo)簽代替列名举反。 不同的驅(qū)動(dòng)在這 方便表現(xiàn)不同懊直。 參考驅(qū)動(dòng)文檔或充分測(cè) 試兩種方法來(lái)決定所使用的驅(qū)動(dòng) -->
        <setting name="useColumnLabel" value="true" />
        <!-- 允許 JDBC 支持生成的鍵。需要適合的驅(qū)動(dòng)火鼻。如果設(shè)置為true則這個(gè)設(shè)置強(qiáng)制 生成的鍵被使用, 盡管一些驅(qū)動(dòng)拒絕兼容但仍然有效(比如Derby) -->
        <setting name="useGeneratedKeys" value="false" />
        <!-- 配置默認(rèn)的執(zhí)行器室囊。SIMPLE 執(zhí)行器沒(méi) 有什么特別之處雕崩。REUSE 執(zhí)行器重用 預(yù)處理語(yǔ)句。BATCH 執(zhí)行器重用語(yǔ)句和批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!-- 設(shè)置超時(shí)時(shí)間, 它決定驅(qū)動(dòng)等待一個(gè)數(shù) 據(jù)庫(kù)響應(yīng)的時(shí)間 -->
        <setting name="defaultStatementTimeout" value="100" />
        <setting name="safeRowBoundsEnabled" value="false" />
        <setting name="mapUnderscoreToCamelCase" value="false" />
        <setting name="localCacheScope" value="SESSION" />
        <setting name="jdbcTypeForNull" value="OTHER" />
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
    </settings>

    <!-- 類型別名是為 Java類型命名一個(gè)短的名字融撞。 它只和 XML配置有關(guān),只用來(lái)減少類完全 限定名的多余部分 -->
    <typeAliases>
        <typeAlias alias="PmsUser" type="wusc.edu.facade.user.entity.PmsUser" />
    </typeAliases>

    <mappers>
        <mapper resource="mybatis/mapper/PmsUser.Mapper.xml" /> 
    </mappers>

</configuration>

直接使用SqlSessionTemplate 進(jìn)行數(shù)據(jù)庫(kù)操作

@Autowired
private SqlSessionTemplate sessionTemplate;

去掉mybatis-config.xml配置文件

直接在Spring配置文件中對(duì)Mybatis進(jìn)行配置

    <!--創(chuàng)建一個(gè)sql會(huì)話工廠bean盼铁,指定數(shù)據(jù)源 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 1指定數(shù)據(jù)源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 2類型別名包,默認(rèn)引入com.zhangguo.Spring61.entities下的所有類 -->
        <property name="typeAliasesPackage" value="wusc.edu.facade.user.entity"></property>
        <!-- 3指定sql映射xml文件的路徑 -->
        <property name="mapperLocations"
            value="classpath:mybatis/mapper/*Mapper.xml"></property>
    </bean>

mapperLocations:它表示我們的Mapper文件存放的位置尝偎,當(dāng)我們的Mapper文件跟對(duì)應(yīng)的Mapper接口處于同一位置的時(shí)候可以不用指定該屬性的值饶火。

configLocation:用于指定Mybatis的配置文件位置。如果指定了該屬性致扯,那么會(huì)以該配置文件的內(nèi)容作為配置信息構(gòu)建對(duì)應(yīng)的SqlSessionFactoryBuilder肤寝,但是后續(xù)屬性指定的內(nèi)容會(huì)覆蓋該配置文件里面指定的對(duì)應(yīng)內(nèi)容。

typeAliasesPackage:它一般對(duì)應(yīng)我們的實(shí)體類所在的包抖僵,這個(gè)時(shí)候會(huì)自動(dòng)取對(duì)應(yīng)包中不包括包名的簡(jiǎn)單類名作為包括包名的別名鲤看。多個(gè)package之間可以用逗號(hào)或者分號(hào)等來(lái)進(jìn)行分隔。

typeAliases:數(shù)組類型耍群,用來(lái)指定別名的刨摩。指定了這個(gè)屬性后,Mybatis會(huì)把這個(gè)類型的短名稱作為這個(gè)類型的別名世吨,前提是該類上沒(méi)有標(biāo)注@Alias注解澡刹,否則將使用該注解對(duì)應(yīng)的值作為此種類型的別名。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耘婚,一起剝皮案震驚了整個(gè)濱河市罢浇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沐祷,老刑警劉巖嚷闭,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赖临,居然都是意外死亡胞锰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門兢榨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗅榕,“玉大人,你說(shuō)我怎么就攤上這事吵聪×枘牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵吟逝,是天一觀的道長(zhǎng)帽蝶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)块攒,這世上最難降的妖魔是什么励稳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任佃乘,我火速辦了婚禮,結(jié)果婚禮上驹尼,老公的妹妹穿的比我還像新娘趣避。我一直安慰自己,他們只是感情好扶欣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著千扶,像睡著了一般料祠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澎羞,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天髓绽,我揣著相機(jī)與錄音,去河邊找鬼妆绞。 笑死顺呕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括饶。 我是一名探鬼主播株茶,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼图焰!你這毒婦竟也來(lái)了启盛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤技羔,失蹤者是張志新(化名)和其女友劉穎僵闯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體藤滥,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳖粟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拙绊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片向图。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖标沪,靈堂內(nèi)的尸體忽然破棺而出张漂,到底是詐尸還是另有隱情,我是刑警寧澤谨娜,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布航攒,位于F島的核電站,受9級(jí)特大地震影響趴梢,放射性物質(zhì)發(fā)生泄漏漠畜。R本人自食惡果不足惜币他,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望憔狞。 院中可真熱鬧蝴悉,春花似錦、人聲如沸瘾敢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)簇抵。三九已至庆杜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碟摆,已是汗流浹背晃财。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留典蜕,地道東北人断盛。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像愉舔,于是被迫代替她去往敵國(guó)和親钢猛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348