Unit08: Spring與MyBatis整合 、 Spring整合MyBatis應用
Spring與MyBatis整合
mybatis-spring.jar簡介
Spring與MyBatis整合需要引入一個mybatis-spring.jar檔案包,該整合包由MyBatis提供,可以從MyBatis官網下載。
mybatis-spring.jar提供了下面幾個與整合相關的API
-
SqlSessionFactoryBean
- 為整合應用提供SqlSession物件資源
-
MapperFactoryBean
- 根據指定Mapper介面生成Bean例項
-
MapperScannerConfigurer
- 根據指定包批量掃描Mapper介面並生成例項
SqlSessionFactoryBean
在單獨使用MyBatis時,所有操作都是圍繞SqlSession展開的,SqlSession是通過SqlSessionFactory獲取的,SqlSessionFactory又是通過SqlSessionFactoryBuilder建立生成。
在Spring和MyBatis整合應用時,同樣需要SqlSession,mybatis-spring.jar提供了一個SqlSessionFactoryBean。這個元件作用就是通過原SqlSessionFactoryBuilder生成SqlSessionFactory物件,為整合應用提供SqlSession物件。
SqlSessionFactoryBean在applicationContext.xml中定義格式如下
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定連線資源 -->
<property name="dataSource" ref="myDataSource"/>
<!-- 指定對映檔案 -->
<property name="mapperLocations" value="classpath:org/tarena/entity/*.xml"/>
</bean>
通過SqlSessionFactoryBean還可以定義一些屬性來指定Mybatis框架的配置資訊。在定義SqlSessionFactoryBean時,可以使用以下常用屬性
屬性名 | 描述 |
---|---|
dataSource | 用於指定連線資料庫的資料來源(必要屬性) |
mapperLocations | 用於指定Mapper檔案存放的位置 |
configLocation | 用於指定Mybatis的配置檔案位置。如果指定了該屬性,那麼會以該配置檔案的內容作為配置資訊構建對應的SqlSessionFactoryBuilder,但是後續屬性指定的內容會覆蓋該配置檔案裡面指定的對應內容 |
typeAliasesPackage | 它一般對應我們的時實體類所在的包,這個時候會自動取對應包中不包括包名的的別名。多個package之間可以用逗號或者分號等來進行分隔 |
typeAliases | 陣列型別,用來指定別名的。指定了這個屬性後,Mybatis會把這個型別的短名稱作為這個型別的別名 |
MapperScannerConfigurer
在使用MapperFactoryBean時,有一個Mapper就需要定義一個對應的MapperFactoryBean。當Mapper比較少時可以,但遇到大量Mapper時就需要使用mybatis-spring.jar提供的MapperScannerConfigurer元件,通過這個元件會自動掃描各個Mapper介面,並註冊對應的MapperFactoryBean物件
在定義MapperScannerConfigurer時,只需要指定一個basePackage即可。basePackage用於指定Mapper介面所在的包,在這個包及其所有子包下面的Mapper介面都將被搜尋到,並把他們註冊為一個個MapperFactoryBean物件。多個包之間可以使用逗號或者分號進行分隔。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.tarena.mapper" />
<bean>
sqlSessionFactory屬性可以不用指定,會以Autowired方式自動注入
如果指定的某個包下並不完全是我們定義的Mapper介面,此時使用MapperScannerConfigurer的另外兩個屬性可以縮小搜尋和註冊範圍,一個是annotationClass,另一個是markerInterface。
annotationClass:用於指定一個註解標記,當指定了annotationClass時,MapperScannerConfiguer將只註冊使用了annotationClass註解標記的介面
markeInterface:用於指定一個介面,當指定了markerInterface時,MapperScannerConfigurer將只註冊繼承自markerInterface的介面
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.tarena" />
<property name="annotationClass" value="org.tarena.annotation.MyBatisRepository"/>
</bean>
上面配置含義:MapperScannerConfigurer自動掃描org.tarena包下所有介面,遇到帶@MyBatisRepository標記的將對應MapperFactoryBean物件註冊
@MaBatisRepository自定義註解標記程式碼如下
public @interface MyBatisRepository{
}
SqlSessionTemplate
上述整合完成後,程式可直接使用Spring容器中的Mapper介面例項進行程式設計。此為mybatis-spring.jar還提供了一個SqlSessionTemplate元件,也可以將該元件物件注入給程式中的DAO,在DAO中利用
SqlSessionTemplata程式設計。
基於SqlSessionTemplate的DAO示例程式碼如下
@Repository
public class MyBatisDeptDAO implements DeptDAO{
private SqlSessionTemplate template;
@Autowired
public void setTemplate(SqlSessionTemplate template){
this.template = template;
}
}
public List<Dept> findAll(){
List<Dept> list = template.selectList("findAll");
}
基於SqlSessionTemplate的DAO配置資訊如下
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory">
</constructor-arg>
</bean>
<context:component-scan base-package="org.tarena.dao"/>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
</bean>
Spring整合MyBatis應用
整合步驟介紹
基於SpringMVC和MyBatis技術開發的主要步驟如下
建立工程,搭建SpringMVC和MyBatis技術環境
基於MapperScannerConfigurer方式整合MyBatis的Mapper介面(推薦)
編寫和配置SpringMVC的主要元件,例如Controller,HandlerMapping,ViewResolver等
編寫JSP檢視元件,利用標籤和表示式顯示模型資料
測試程式
如何搭建SpringMVC和MyBatis技術環境?
建立一個Web工程
-
新增MyBatis相關技術環境
- 引入資料庫驅動包和MyBatis開發包
- 引入dbcp連線池開發包
-
新增SpringMVC相關技術環境
- 引入Spring ioc,jdbc,tx等支援的開發包
- 引入Spring webmvc支援的開發包
- 在src下新增applicationContext.xml配置檔案
- 在web.xml中配置DispatcherServleet主控制器
引入MyBatis和Spring整合開發包mybatis-spring.jar
如何基於MapperScannerConfigurer方式整合MyBatis的Mapper介面?
- 根據資料表編寫實體類
- 編寫Mapper對映檔案,在XML中新增SQL操作的定義
- 編寫Mapper介面,定義SQL操作方法
-
在Spring配置檔案中定義以下Bean
- DateSource
- SqlSessionFactoryBean
- MapperScannerConfigurer
測試Spring容器的DAO元件
如何編寫和配置SpringMVC的主要元件?
- 編寫Controller和請求處理方法
- 配置<mvc:annotation-driven/>,支援@RequestMapping
-
配置Controller元件
- 開啟元件掃描,將Controller掃描到Spring容器
- 需要DAO時採用注入方式使用
- 在請求處理方法上使用@RequestMapping指定對應的請求
- 配置ViewResolver元件
在JSP檢視元件中如何顯示模型資料?
JSP可以使用JSTL標籤庫,需要引入開發包 jstl(JSP Standard Tag Library)
JSP可以使用EL表示式 EL(Expression Language)
JSP可以使用SpringMVC的表單標籤
相關文章
- Mybatis與Spring整合MyBatisSpring
- spring:spring與mybatis的整合SpringMyBatis
- Spring 整合 MyBatisSpringMyBatis
- mybatis整合springMyBatisSpring
- Spring整合MyBatisSpringMyBatis
- Spring Boot 整合 MyBatisSpring BootMyBatis
- Spring整合Mybatis plusSpringMyBatis
- spring boot 整合mybatisSpring BootMyBatis
- Spring整合JUnit,MybatisSpringMyBatis
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- Spring同時整合JPA與MybatisSpringMyBatis
- mybatis與spring整合ssm01MyBatisSpringSSM
- 深入淺出MyBatis:MyBatis與Spring整合及實用場景MyBatisSpring
- Spring boot 六 整合 MyBatisSpring BootMyBatis
- spring 整合 mybatis 及mybatis 的 crud 操作SpringMyBatis
- MyBatis6:MyBatis整合Spring事物管理(下篇)MyBatisSpring
- spring整合mybatis(idea版)SpringMyBatisIdea
- SSM——Spring整合SpringMVC,MyBatisSSMSpringMVCMyBatis
- JAVA學習Spring整合MybatisJavaSpringMyBatis
- Spring筆記(四)整合MybatisSpring筆記MyBatis
- SSM(SpringMVC + Spring + Mybatis)整合SSMSpringMVCMyBatis
- Spring Boot 整合 Mybatis 和 MySQLSpring BootMyBatisMySql
- Spring整合Mybatis方式二 - SqlSessionTemplateSpringMyBatisSQLSession
- SSM整合(Spring、SpringMVC、Mybatis)SSMSpringMVCMyBatis
- Spring Boot —— 整合 MyBatis-PlusSpring BootMyBatis
- Mybatis與Spring整合時都做了什麼?MyBatisSpring
- Spring框架(五)實戰Spring整合MybatisSpring框架MyBatis
- MyBatis5:MyBatis整合Spring事務管理(上篇)MyBatisSpring
- Mybatis整合Spring(ssm整合待續)-day04MyBatisSpringSSM
- MyBatis和Spring整合的奧祕MyBatisSpring
- Spring+SpringMVC+MyBatis框架整合SpringMVCMyBatis框架
- Spring+SpringMVC+MyBatis的整合SpringMVCMyBatis
- 【Spring Boot】快速整合Mybatis-PlusSpring BootMyBatis
- mybatis+spring+struts2框架整合MyBatisSpring框架
- Mybatis分頁和Spring的整合MyBatisSpring
- Spring boot學習(三) Spring boot整合mybatisSpring BootMyBatis
- 小代學Spring Boot之整合MyBatisSpring BootMyBatis
- 深入原始碼理解Spring整合MyBatis原理原始碼SpringMyBatis