最新Spring整合MyBatis詳解教程

作者:Baret H ~ 地址:http://i8n.cn/e4aXqM

首先新建一個(gè)空的maven項(xiàng)目
1、導(dǎo)入相關(guān)jar包
1. junit
????junit
????junit
????4.13
????test
2. mybatis
????org.mybatis
????mybatis
????3.5.5
3. mysql
????mysql
????mysql-connector-java
????8.0.21
4. spring相關(guān)
????org.springframework
????spring-webmvc
????5.2.8.RELEASE
????org.springframework
????spring-jdbc
????5.1.3.RELEASE
5. aop織入
????org.aspectj
????aspectjweaver
????1.9.4
6. mybatis-spring
????org.mybatis
????mybatis-spring
????2.0.5
7. lombok(選用)
????org.projectlombok
????lombok
????1.18.12
最后為了防止maven配置文件無法被導(dǎo)出或生效,加入以下代碼
????
????????
????????????src/main/resources
????????????
????????????????**/*.properties
????????????????**/*.xml
????????????
????????????true
????????
????????
????????????src/main/java
????????????
????????????????**/*.properties
????????????????**/*.xml
????????????
????????????true
????????
????
2、回顧:建立一個(gè)Mybatis程序
1. IDEA連接數(shù)據(jù)庫(kù)
大家連接自己的數(shù)據(jù)庫(kù)即可,這里的實(shí)驗(yàn)表格為

2. 編寫MyBatis核心配置文件

"1.0"?encoding="UTF-8"??>
????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-config.dtd">
????default="development">
????????"development">
????????????"JDBC"/>
????????????"POOLED">
????????????????"driver"?value="com.mysql.jdbc.Driver"/>
????????????????"url"?value="jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8"/>
????????????????"username"?value="root"/>
????????????????"password"?value="200024"/>
????????????
????????
????
3. 創(chuàng)建數(shù)據(jù)庫(kù)表對(duì)應(yīng)實(shí)體類

package?pojo;
import?lombok.Data;
@Data
public?class?User?{
????private?int?id;
????private?String?name;
????private?String?pwd;
}
4. 編寫Mapper接口

package?mapper;
import?pojo.User;
import?java.util.List;
public?interface?UserMapper?{
????public?List?getUser() ;
}
5. 編寫Mapper.xml配置文件

"1.0"?encoding="UTF-8"??>
????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"mapper.UserMapper">
????
6. 編寫測(cè)試類

public?class?Test?{
????@org.junit.Test
????public?void?test()?throws?IOException?{
????????String?resource?=?"mybatis-config.xml";
????????InputStream?in?=?Resources.getResourceAsStream(resource);
????????SqlSessionFactory?sessionFactory?=?new?SqlSessionFactoryBuilder().build(in);
????????SqlSession?sqlSession?=?sessionFactory.openSession(true);
????????UserMapper?mapper?=?sqlSession.getMapper(UserMapper.class);
????????List?users?=?mapper.getUser();
????????for?(User?user?:?users)?{
????????????System.out.println(user);
????????}
????}
}
7. 給Mapper.xml添加注冊(cè)
在核心配置文件mybatis-config.xml中加入以下代碼
????class="mapper.UserMapper"/>
8. 測(cè)試運(yùn)行

到此,mybatis程序的創(chuàng)建已成功,接下來將進(jìn)行修改,整合spring
3、spring整合:方式一
通過SqlSessionTemplate創(chuàng)建SqlSession
接下來將在上述實(shí)驗(yàn)環(huán)境下進(jìn)行修改
1. 引入spring配置文件
在resource目錄下新建spring-dao.xml

"1.0"?encoding="UTF-8"?>
"http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????xmlns:aop="http://www.springframework.org/schema/aop"
???????xsi:schemaLocation="http://www.springframework.org/schema/beans
????????https://www.springframework.org/schema/beans/spring-beans.xsd">
2. 使用Spring的數(shù)據(jù)源替換MyBatis的數(shù)據(jù)源配置
在spring配置文件中加入以下代碼,配置數(shù)據(jù)源信息
"dataSource"?class="org.springframework.jdbc.datasource.DriverManagerDataSource">
????"driverClassName"?value="com.mysql.cj.jdbc.Driver"/>
????"url"
??????????????value="jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8"/>
????"username"?value="root"/>
????"password"?value="200024"/>
此時(shí),就可以刪除mybatis核心配置文件mybatis-config.xml中的數(shù)據(jù)源配置

3. 通過spring創(chuàng)建sqlSessionFactory
在 MyBatis 中,是通過
SqlSessionFactoryBuilder來創(chuàng)建SqlSessionFactory而在 MyBatis-Spring 中,則使用
SqlSessionFactoryBean來創(chuàng)建
在
spring配置文件中加入以下代碼,創(chuàng)建sqlSessionFactory
"sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">
????"dataSource"?ref="dataSource"/>
唯一的必要屬性:用于 JDBC 的 DataSource,注入上述創(chuàng)建好的數(shù)據(jù)源
還可以配置其他屬性,完全取代mybatis-config.xml中的配置

這里加入兩個(gè)屬性配置:
configLocation:指定mybatis的xml配置文件路徑mapperLocations:注冊(cè)Mapper.xm映射器
"sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">
????"dataSource"?ref="dataSource"/>
????
????"configLocation"?value="classpath:mybatis-config.xml"/>
????
????"mapperLocations"?value="classpath:mapper/*.xml"/>
這里,我們?cè)?code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">spring配置文件中注冊(cè)了Mapper.xml,就可以刪除mybatis-config.xml中的Mapper.xml的注冊(cè)

4. 創(chuàng)建sqlSession對(duì)象
在
mybatis中,SqlSession提供了在數(shù)據(jù)庫(kù)執(zhí)行 SQL 命令所需的所有方法而在
spring-mybatis,沒有SqlSession了,而是SqlSessionTemplate,這兩個(gè)是同一個(gè)東西
在
spring配置文件中加入以下代碼,創(chuàng)建sqlSession
這里使用上述創(chuàng)建好的
sqlSessionFactory作為構(gòu)造方法的參數(shù)來創(chuàng)建SqlSessionTemplate對(duì)象。
"sqlSession"?class="org.mybatis.spring.SqlSessionTemplate">
????
????"0"?ref="sqlSessionFactory"/>
5. 新建接口實(shí)現(xiàn)類
上一步我們創(chuàng)建了
sqlSession對(duì)象,此時(shí)需要?jiǎng)?chuàng)建一個(gè)類來使用sqlSession

在該類中添加一個(gè)
SqlSession 屬性,并添加 set方法 用于后續(xù)sqlSession的注入public?class?UserMapperImpl?implements?UserMapper?{
????//原來所有操作都通過SqlSession來執(zhí)行,現(xiàn)在都是SqlSessionTemplate
????private?SqlSessionTemplate?sqlSession;
????public?void?setSqlSession(SqlSessionTemplate?sqlSession)?{
????????this.sqlSession?=?sqlSession;
????}
????public?List?getUser()? {
????????UserMapper?mapper?=?sqlSession.getMapper(UserMapper.class);
????????return?mapper.getUser();
????}
}
6. 創(chuàng)建實(shí)現(xiàn)類對(duì)象
利用spring創(chuàng)建上述接口實(shí)現(xiàn)類對(duì)象,取名為
userMapper,并注入上述創(chuàng)建好的sqlSession對(duì)象
"userMapper"?class="mapper.UserMapperImpl">
????"sqlSession"?ref="sqlSession"/>
7. 修改測(cè)試類
此時(shí),無需像先前一樣創(chuàng)建sqlSessionFactory和sqlSession,我們只需獲得創(chuàng)建好的``實(shí)體類對(duì)象```UserMapper,然后調(diào)用該對(duì)象的方法即可
public?class?Test?{
????@org.junit.Test
????public?void?test()?throws?IOException?{
????????ApplicationContext?context?=?new?ClassPathXmlApplicationContext("spring-dao.xml");
????????UserMapperImpl?userMapper?=?(UserMapperImpl)?context.getBean("userMapper");
????????List?users?=?userMapper.getUser();
????????for?(User?user?:?users)?{
????????????System.out.println(user);
????????}
????}
}
8. 運(yùn)行測(cè)試

運(yùn)行成功?。?!
4、spring整合:方式二
通過SqlSessionDaoSupport獲得Sqlsession
接下來將在上述實(shí)驗(yàn)環(huán)境下進(jìn)行修改
1. 新建接口實(shí)現(xiàn)類
新建一個(gè)接口實(shí)現(xiàn)類,繼承SqlSessionDaoSupport類,直接可以獲得SqlSession對(duì)象

public?class?UserMapperImpl2?extends?SqlSessionDaoSupport?implements?UserMapper?{
????public?List?getUser()? {
????????SqlSession?sqlSession?=?getSqlSession();
????????UserMapper?mapper?=?sqlSession.getMapper(UserMapper.class);
????????return?mapper.getUser();
????}
}
2. 創(chuàng)建接口實(shí)現(xiàn)類對(duì)象
通過Spring來創(chuàng)建
在spring配置文件中創(chuàng)建上述實(shí)體類對(duì)象userMapper2,并設(shè)置sqlSessionFactory屬性為上述創(chuàng)建好的sqlSessionFactory
"userMapper2"?class="mapper.UserMapperImpl2">
????"sqlSessionFactory"?ref="sqlSessionFactory"/>
3. 修改測(cè)試類
同樣,無需像先前一樣創(chuàng)建
sqlSessionFactory和sqlSession,我們只需獲得創(chuàng)建好的實(shí)體類對(duì)象UserMapper2,然后調(diào)用該對(duì)象的方法即可
public?class?Test?{
????@org.junit.Test
????public?void?test()?throws?IOException?{
????????ApplicationContext?context?=?new?ClassPathXmlApplicationContext("spring-dao.xml");
????????UserMapperImpl2?userMapper?=?(UserMapperImpl2)?context.getBean("userMapper2");
????????List?users?=?userMapper.getUser();
????????for?(User?user?:?users)?{
????????????System.out.println(user);
????????}
????}
} 4. 測(cè)試運(yùn)行

成功運(yùn)行!!
【推薦閱讀】
Java代碼中 : : 是什么語(yǔ)法? 一款基于 SpringCloud 開源的商城系統(tǒng)(附源碼) 3個(gè)開源的快速開發(fā)平臺(tái),前后端都有! Java 如何精確統(tǒng)計(jì)頁(yè)面停留時(shí)長(zhǎng)? SpringBoot 如何上傳大文件? 福利:公眾號(hào)點(diǎn)擊關(guān)注“Java”,可以免費(fèi)領(lǐng)取全套【Java學(xué)習(xí)資料】,更多驚喜等你去發(fā)現(xiàn)~ 萬水千山總是情,點(diǎn)個(gè) “ 看” 行不行 在
