Spring框架(五)實戰Spring整合Mybatis
基於:【狂神說Java】Spring5最新完整教程IDEA版通俗易懂
目錄
1 Mybatis回顧
可以參考:MyBatis(一)第一個MyBatis程式(idea+maven)
使用原生mybatis的一般性流程:
- 使用maven匯入mybatis、mysql依賴包;
- 配置mybatis-config.xml檔案,包括資料庫資訊、註冊mapper等;
- 編寫一個MybatisUtils類,用來從.xml載入資料來源,返回SqlSession物件;
- 編寫業務Mapper介面;
- 編寫Mapper配置檔案,編寫相應的SQL業務邏輯;
- 測試使用:獲得sqlSession物件,獲得mapper,呼叫mapper方法返回結果;
2 Spring使用Mybatis
由於Spring的IoC功能,所有的物件都交給Spring去管理,所以原生mybatis的物件也需要交給Spring去管理,不再使用new
關鍵字去建立物件,而採用bean;
2.1 spring-dao.xml配置
2.1.1 dataSource
<!--資料來源,代替MybatisUtils.java的資料庫連結類-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/datasets?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
以上程式碼將資料來源註冊為物件,類似於原生的從xml載入資源:
InputStream inputStream = Resources.getResourceAsStream(resource)
2.1.2 sqlSessionFactory
<!--sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--mybatis配置檔案-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
將sqlSessionFactory
註冊為物件,類似於原生的建立工廠:
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.1.3 sqlSession
<!--sqlSession-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
獲得sqlSession
,類似於原生的sqlSessionFactory.openSession()
,此處的SqlSessionTemplate
實現了SqlSession
介面。
2.2 測試使用
和原生mybatis一樣的使用方法:
public void springAllUsersGet(){
//讀入配置
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
SqlSession sqlSession = context.getBean("sqlSessionTemplate",SqlSession.class);
//建立對映
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for (User user : mapper.getAllUsers()) {
logger.debug(user);
}
}
問題來了,既然Spring的設計理念是IoC,那麼在以上使用的時候mapper
和sqlSession
之間的關係,也是屬於依賴注入,mapper
例項物件也可以交給Spring去管理,使用者只關心從context
拿就行。
2.2.1 Mapper實現類
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSessionTemplate;
//set進來
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
@Override
public List<User> getAllUsers() {
UserMapper mapper=sqlSessionTemplate.getMapper(UserMapper.class);
return mapper.getAllUsers();
}
}
2.2.2 Mapper註冊bean
<bean id="userMapper" class="dao.UserMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
2.2.3 測試使用
@Test
public void springAllUsersGet() {
//讀入配置
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
//獲得
UserMapper mapper = context.getBean("userMapper",UserMapper.class);
//獲得
for (User user : mapper.getAllUsers()) {
logger.debug(user.toString());
}
}
可以注意到,直接從context
上下文就獲得了bean
物件,直接使用,耦合性大大降低;
但是注意:設計介面和編寫Mapper
對應的sql語句是必須的,這是mybatis的核心,並且需要使用<property name="configLocation" value="classpath:mybatis-config.xml"/>
匯入進去,spring-mybatis
僅僅是提供了一種優雅的物件管理機制而已。
2.3 使用SqlSessionDaoSupport
2.3.1 介面實現
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
@Override
public List<User> getAllUsers() {
return getSqlSession().getMapper(UserMapper.class).getAllUsers();
}
}
繼承了SqlSessionDaoSupport
,可以直接獲得SqlSession
,不用在spring中配置SqlSession
的bean;
2.3.2 配置註冊Bean
<bean id="userMapper" class="dao.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
注意:使用sqlSessionFactory
注入是UserMapperImpl
實現類,跨過了SqlSession
;
3 總結
使用Spring
去整合Mybatis
主要就是利用了Spring IoC
的思想,把一些配置類直接在Spring
配置檔案中進行註冊成Bean
,讓程式更多的關注業務邏輯實現,而不是一堆獲取資料庫的操作。
相關文章
- Spring+SpringMVC+MyBatis框架整合SpringMVCMyBatis框架
- mybatis+spring+struts2框架整合MyBatisSpring框架
- MyBatis初級實戰之一:Spring Boot整合MyBatisSpring Boot
- Spring 整合 MyBatisSpringMyBatis
- mybatis整合springMyBatisSpring
- Spring整合MyBatisSpringMyBatis
- Spring boot學習(五)Spring boot整合Mybatis Generator以及PageHelperSpring BootMyBatis
- Spring+SpringMVC+Mybatis框架整合搭建教程SpringMVCMyBatis框架
- Unit08: Spring與MyBatis整合 、 Spring整合MyBatis應用SpringMyBatis
- spring:spring與mybatis的整合SpringMyBatis
- Spring Boot 整合 MyBatisSpring BootMyBatis
- Spring整合Mybatis plusSpringMyBatis
- Mybatis與Spring整合MyBatisSpring
- spring boot 整合mybatisSpring BootMyBatis
- Spring整合JUnit,MybatisSpringMyBatis
- Maven整合SSM框架(maven+spring+springmvc+mybatis)MavenSSM框架SpringMVCMyBatis
- Spring Boot 整合 Elasticsearch 實戰Spring BootElasticsearch
- Spring boot 六 整合 MyBatisSpring BootMyBatis
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- Spring+SpringMvc+Mybatis框架整合搭建教程五(專案原始碼釋出到GitHub)SpringMVCMyBatis框架原始碼Github
- Spring+SpringMvc+Mybatis框架整合搭建教程二(依賴配置及框架整合)SpringMVCMyBatis框架
- SSM(Spring-MyBatis-SpringMVC)框架整合【完整版】SSMMyBatisSpringMVC框架
- SSM框架——詳細整合教程(Spring+SpringMVC+MyBatis)SSM框架SpringMVCMyBatis
- SSM框架——具體整合教程(Spring+SpringMVC+MyBatis)SSM框架SpringMVCMyBatis
- Spring Boot整合MyBatis實現通用MapperSpring BootMyBatisAPP
- Spring Boot 整合 MyBatis和 SQL Server實踐Spring BootMyBatisSQLServer
- spring 整合 mybatis 及mybatis 的 crud 操作SpringMyBatis
- Spring Boot整合Redis實戰操作Spring BootRedis
- Spring+SpringMvc+Mybatis框架整合搭建教程三(框架整合測試程式開發)SpringMVCMyBatis框架
- Spring框架|整合JdbcTemplateSpring框架JDBC
- Spring整合其他框架Spring框架
- Spring Boot 揭祕與實戰(二) 資料儲存篇 – MyBatis整合Spring BootMyBatis
- Spring Boot 揭祕與實戰(二) 資料儲存篇 - MyBatis整合Spring BootMyBatis
- Spring boot學習(三) Spring boot整合mybatisSpring BootMyBatis
- spring整合mybatis(idea版)SpringMyBatisIdea
- SSM——Spring整合SpringMVC,MyBatisSSMSpringMVCMyBatis
- JAVA學習Spring整合MybatisJavaSpringMyBatis
- Spring筆記(四)整合MybatisSpring筆記MyBatis