mybatis 學習記錄1

原由

  之前剛學習java三大框架的時候持久層框架我是自學的是hibernate..感受蠻好用的,so easy..後來大三實習公司用的是jpa(hibernate外包裝一層)...再後來工做1年多用的是spring data(jpa外包裝一層)...一直感受蠻好用的,尤爲是Spring data..愛不釋手...感受基本都不用寫SQL...java

  如今換了新公司,用的是mybatis..用了2個多月了...感受..在一些狀況下會比Spring data還要傻瓜式操做....有不少有趣的地方值得記錄...mysql

  這篇文章主要介紹我怎麼把mybatis與Spring集成.git

 

配置

我以爲XXX框架與Spring集成不少時候實際上是同樣的套路...原本XXX框架本身單獨使用的時候基本都是配置1個本身的Factory加載本身的配置....生成一個核心的Facade類....而後與Spring集成的時候就是配置一個Spring的XXXFactoryBean.而後加載XXX配置....生成XXX框架的Factory...github

好比與Spring data或者hibernate集成的時候配置一個LocalContainerEntityManagerFactoryBean生成了entityManagerFactory,能夠生成核心的Facade類EntityManager.spring

mybatis彷佛是配置SqlSessionFactoryBean能夠生成SqlSessionFactory.而後生成核心的Facade類SqlSession...sql

按照這個套路配置是這樣的apache

 1 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:repository="http://www.springframework.org/schema/data/repository"
 3     xmlns:jee="http://www.springframework.org/schema/jee"
 4     xsi:schemaLocation="
 5      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
 6      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
 8      http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
 9      http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd
10      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
11 ">
12     <!-- 基於註釋的事務,當註釋中發現@Transactional時,使用id爲「transactionManager」的事務管理器 -->
13     <!-- 若是沒有設置transaction-manager的值,則spring以缺省默認的事務管理器來處理事務,默認事務管理器爲第一個加載的事務管理器 -->
14     <tx:annotation-driven transaction-manager="transactionManager" />
15 
16     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
17         <property name="driverClassName" value="${jdbc.driverClassName}" />
18         <property name="url" value="${jdbc.url}" />
19         <property name="username" value="${jdbc.username}" />
20         <property name="password" value="${jdbc.password}" />
21     </bean>
22 
23     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
24         <property name="dataSource" ref="dataSource" />
25     </bean>
26 
27     <!-- 建立SqlSessionFactory,同時指定數據源 -->
28     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
29         <property name="dataSource" ref="dataSource" />
30         <property name="mapperLocations" value="classpath:mapper/*.xml"></property> 
31          <property name="configLocation" value="classpath:spring/mybatis/mybatis-config.xml" />  
32     </bean>
33 
34     <!-- Mapper接口所在包名,Spring會自動查找其下的Mapper -->
35     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
36         <property name="basePackage" value="com.labofjet" />
37     </bean>
38 </beans>
View Code

而後把這個配置在spring本身的配置裏引入就能夠了.mybatis

1 <import resource="classpath*:/spring/mybatis/mybatis-context.xml" />

此外由於mybatis我用到了pagehelper...因此額外配置了mybatis-config..在裏面配置pagehelper的interceptor...我以爲這個pagehelper的原理大概是mybatis發送SQL以前攔截並在外面嵌套一層加上分頁條件吧.....app

這個配置(mybatis-config)是我百度的....框架

 1 <?xml version="1.0" encoding="UTF-8" ?>  
 2 <!DOCTYPE configuration  
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <!-- 配置管理器 -->
 6 <configuration>
 7     <plugins>
 8         <!-- com.github.pagehelper爲PageHelper類所在包名 -->
 9         <plugin interceptor="com.github.pagehelper.PageHelper">
10             <!-- 4.0.0之後版本能夠不設置該參數 -->
11             <property name="dialect" value="mysql" />
12             <!-- 該參數默認爲false -->
13             <!-- 設置爲true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 -->
14             <!-- 和startPage中的pageNum效果同樣 -->
15             <property name="offsetAsPageNum" value="true" />
16             <!-- 該參數默認爲false -->
17             <!-- 設置爲true時,使用RowBounds分頁會進行count查詢 -->
18             <property name="rowBoundsWithCount" value="false" />
19             <!-- 設置爲true時,若是pageSize=0或者RowBounds.limit = 0就會查詢出所有的結果 -->
20             <!-- (至關於沒有執行分頁查詢,可是返回結果仍然是Page類型) -->
21             <property name="pageSizeZero" value="false" />
22             <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->
23             <!-- 啓用合理化時,若是pageNum<1會查詢第一頁,若是pageNum>pages會查詢最後一頁 -->
24             <!-- 禁用合理化時,若是pageNum<1或pageNum>pages會返回空數據 -->
25             <property name="reasonable" value="false" />
26             <!-- 3.5.0版本可用 - 爲了支持startPage(Object params)方法 -->
27             <!-- 增長了一個`params`參數來配置參數映射,用於從Map或ServletRequest中取值 -->
28             <!-- 能夠配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默認值 -->
29             <!-- 不理解該含義的前提下,不要隨便複製該配置 -->
30             <!-- <property name="params" value="pageNum=start;pageSize=limit;" /> -->
31             <!-- 支持經過Mapper接口參數來傳遞分頁參數 -->
32             <property name="supportMethodsArguments" value="true" />
33             <!-- always老是返回PageInfo類型,check檢查返回類型是否爲PageInfo,none返回Page -->
34             <property name="returnPageInfo" value="check" />
35         </plugin>
36     </plugins>
37 </configuration>  
View Code

這樣便整合完成了....

 

實際使用效果:

相關文章
相關標籤/搜索