Mybatis

什么是MyBatis

MyBatis是支持普通SQL查詢(xún),存儲(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ù)中的記錄.

入門(mén)

每個(gè)MyBatis的應(yīng)用程序都以一個(gè)SQLSessionFactory對(duì)象的實(shí)例為核心.SQLSessionFactory對(duì)象的實(shí)例可以通過(guò)SqlSessionFactory對(duì)象來(lái)獲得.SqlSessionFactory對(duì)象可以通過(guò)XML配置文件,或從以往使用慣例中準(zhǔn)備好的Configuration類(lèi)實(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è)類(lèi)庫(kù)中的類(lèi),Spring將會(huì)加載必要的MyBatis工廠類(lèi)和session類(lèi)。這個(gè)類(lèi)庫(kù)也提供一個(gè)簡(jiǎn)單的方式來(lái)注入MyBatis數(shù)據(jù)映射器和SqlSession到業(yè)務(wù)層的bean中。而且它也會(huì)處理事務(wù),翻譯MyBatis的異常到Spring的DataAccessException異常(數(shù)據(jù)訪問(wèn)異常,譯者注)中。最終,它并不會(huì)依賴(lài)于MyBatis,Spring或MyBatis-Spring來(lái)構(gòu)建應(yīng)用程序代碼。

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

        <!-- 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模板類(lèi)實(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>

    <!-- 類(lèi)型別名是為 Java類(lèi)型命名一個(gè)短的名字。 它只和 XML配置有關(guān),只用來(lái)減少類(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類(lèi)型別名包,默認(rèn)引入com.zhangguo.Spring61.entities下的所有類(lèi) -->
        <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í)體類(lèi)所在的包,這個(gè)時(shí)候會(huì)自動(dòng)取對(duì)應(yīng)包中不包括包名的簡(jiǎn)單類(lèi)名作為包括包名的別名。多個(gè)package之間可以用逗號(hào)或者分號(hào)等來(lái)進(jìn)行分隔。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容