什么是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)的值作為此種類型的別名。