Spring整合
 1.1 原始MyBatis操作(未整合Spring)
 1.1.1 环境准备
在准备环境的过程中,也来回顾下Mybatis开发的相关内容:
 项目目录结构:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | project├── src
 │   └── main
 │       ├── java
 │       │   └── com.itheima
 │       │       ├── config
 │       │           ├── JdbcConfig.java
 │       │           └── SpringConfig.java
 |       |
 │       │       ├── dao
 │       │       │   └── AccountDao.java
 │       │       ├── domain
 │       │       │   └── Account.java
 │       │       ├── service
 │       │       │   ├── impl
 │       │       │   │   ├── AccountServicelmpl.java
 │       │       │   └── AccountService.java
 │       │       └── App.java
 │       └── resources
 │           ├── jdbc.properties
 │           └── mybatis-config.xml
 └── pom.xml
 
 | 
 步骤1:准备数据库表
Mybatis是来操作数据库表,所以先创建一个数据库及表
| 12
 3
 4
 5
 6
 7
 
 | create database spring_db character set utf8;use spring_db;
 create table tbl_account(
 id int primary key auto_increment,
 name varchar(35),
 money double
 );
 
 | 
 步骤2:创建项目导入jar包
项目的pom.xml添加相关依赖
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | <dependencies><dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>5.2.10.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid</artifactId>
 <version>1.1.16</version>
 </dependency>
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.5.6</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.47</version>
 </dependency>
 </dependencies>
 
 | 
 步骤3:根据表创建模型类
在domain包下创建Account类
| 12
 3
 4
 5
 6
 7
 
 | public class Account implements Serializable {
 private Integer id;
 private String name;
 private Double money;
 
 }
 
 | 
 步骤4:创建Dao接口
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | public interface AccountDao {
 @Insert("insert into tbl_account(name,money)values(#{name},#{money})")
 void save(Account account);
 
 @Delete("delete from tbl_account where id = #{id} ")
 void delete(Integer id);
 
 @Update("update tbl_account set name = #{name} , money = #{money} where id = #{id} ")
 void update(Account account);
 
 @Select("select * from tbl_account")
 List<Account> findAll();
 
 @Select("select * from tbl_account where id = #{id} ")
 Account findById(Integer id);
 }
 
 | 
 步骤5:创建Service接口和实现类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 
 | public interface AccountService {
 void save(Account account);
 
 void delete(Integer id);
 
 void update(Account account);
 
 List<Account> findAll();
 
 Account findById(Integer id);
 
 }
 
 @Service
 public class AccountServiceImpl implements AccountService {
 
 @Autowired
 private AccountDao accountDao;
 
 public void save(Account account) {
 accountDao.save(account);
 }
 
 public void update(Account account){
 accountDao.update(account);
 }
 
 public void delete(Integer id) {
 accountDao.delete(id);
 }
 
 public Account findById(Integer id) {
 return accountDao.findById(id);
 }
 
 public List<Account> findAll() {
 return accountDao.findAll();
 }
 }
 
 | 
 步骤6:添加jdbc.properties文件
resources目录下添加,用于配置数据库连接四要素
| 12
 3
 4
 
 | jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false
 jdbc.username=root
 jdbc.password=root
 
 | 
useSSL:关闭MySQL的SSL连接
 步骤7:添加Mybatis核心配置文件
文件名为mybatis-config.xml
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
 
 <properties resource="jdbc.properties"></properties>
 
 <typeAliases>
 <package name="com.itheima.domain"/>
 </typeAliases>
 
 <environments default="mysql">
 <environment id="mysql">
 <transactionManager type="JDBC"></transactionManager>
 <dataSource type="POOLED">
 <property name="driver" value="${jdbc.driver}"></property>
 <property name="url" value="${jdbc.url}"></property>
 <property name="username" value="${jdbc.username}"></property>
 <property name="password" value="${jdbc.password}"></property>
 </dataSource>
 </environment>
 </environments>
 
 <mappers>
 <package name="com.itheima.dao"></package>
 </mappers>
 </configuration>
 
 | 
 步骤8:编写应用程序
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | public class App {public static void main(String[] args) throws IOException {
 
 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
 
 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
 
 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
 
 SqlSession sqlSession = sqlSessionFactory.openSession();
 
 AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
 
 Account ac = accountDao.findById(1);
 System.out.println(ac);
 
 
 sqlSession.close();
 }
 }
 
 | 
 步骤9:运行程序
| 1
 | Account{id=1, name='Tom', money=1000.0}
 | 
 1.1.2 整合思路分析
Mybatis的基础环境已经准备好了,接下来就得分析下在上述的内容中,哪些对象可以交给Spring来管理?
 1.2 Spring整合Mybatis
关键就是把mybatis配置文件mybatis-config.xml用MybatisConfig.class代替
前面已经分析了Spring与Mybatis的整合,大体需要做两件事,
第一件事是:Spring要管理MyBatis中的SqlSessionFactory
第二件事是:Spring要管理Mapper接口的扫描
 项目目录结构
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | spring-autoware├── src
 │   └── main
 │       ├── java
 │       │   └── com.itheima
 │       │       ├── config
 │       │       │   ├── JdbcConfig.java
 │       │       │   ├── MybatisConfig.java
 │       │       │   ├── SpringConfig.java
 │       │       ├── dao
 │       │       │   └── AccountDao.java
 │       │       ├── domain
 │       │       │   └── Account.java
 │       │       ├── service
 │       │       │   ├── impl
 │       │       │   │   ├── AccountServicelmpl.java
 │       │       │   ├── AccountService.java
 │       │       └── App2.java
 │       └── resources
 │           └── jdbc.properties
 └── pom.xml
 
 | 
 步骤1:项目中导入整合需要的jar包
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>5.2.10.RELEASE</version>
 </dependency>
 <dependency>
 
 
 
 
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-spring</artifactId>
 <version>1.3.0</version>
 </dependency>
 
 | 
 步骤2:创建Spring的主配置类
| 12
 3
 4
 5
 6
 7
 
 | @Configuration
 
 @ComponentScan("com.itheima")
 public class SpringConfig {
 }
 
 
 | 
 步骤3:创建数据源的配置类
在配置类中完成数据源的创建
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | public class JdbcConfig {@Value("${jdbc.driver}")
 private String driver;
 @Value("${jdbc.url}")
 private String url;
 @Value("${jdbc.username}")
 private String userName;
 @Value("${jdbc.password}")
 private String password;
 
 @Bean
 public DataSource dataSource(){
 DruidDataSource ds = new DruidDataSource();
 ds.setDriverClassName(driver);
 ds.setUrl(url);
 ds.setUsername(userName);
 ds.setPassword(password);
 return ds;
 }
 }
 
 | 
 步骤4:主配置类中读properties并引入数据源配置类
| 12
 3
 4
 5
 6
 7
 
 | @Configuration@ComponentScan("com.itheima")
 @PropertySource("classpath:jdbc.properties")
 @Import(JdbcConfig.class)
 public class SpringConfig {
 }
 
 
 | 
 步骤5:创建Mybatis配置类并配置SqlSessionFactory
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | public class MybatisConfig {
 @Bean
 public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
 SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
 
 ssfb.setTypeAliasesPackage("com.itheima.domain");
 
 ssfb.setDataSource(dataSource);
 return ssfb;
 }
 
 
 @Bean
 public MapperScannerConfigurer mapperScannerConfigurer(){
 MapperScannerConfigurer msc = new MapperScannerConfigurer();
 msc.setBasePackage("com.itheima.dao");
 return msc;
 }
 }
 
 | 
说明:
 步骤6:主配置类中引入Mybatis配置类
| 12
 3
 4
 5
 6
 
 | @Configuration@ComponentScan("com.itheima")
 @PropertySource("classpath:jdbc.properties")
 @Import({JdbcConfig.class,MybatisConfig.class})
 public class SpringConfig {
 }
 
 | 
 步骤7:编写运行类
在运行类中,从IOC容器中获取Service对象,调用方法获取结果
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class App2 {public static void main(String[] args) {
 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
 
 AccountService accountService = ctx.getBean(AccountService.class);
 
 Account ac = accountService.findById(1);
 System.out.println(ac);
 }
 }
 
 
 | 
 步骤8:运行程序
| 1
 | Account{id=1, name='Tom', money=1000.0}
 | 
支持Spring与Mybatis的整合就已经完成了,其中主要用到的两个类分别是:
- SqlSessionFactoryBean
- MapperScannerConfigurer
 1.3 Spring整合Junit
整合Junit与整合Druid和MyBatis差异比较大,为什么呢?Junit是一个搞单元测试用的工具,它不是程序的主体,也不会参加最终程序的运行,从作用上来说就和之前的东西不一样,它不是做功能的,看做是一个辅助工具就可以了。
 1.3.1 环境准备
这块环境,大家可以直接使用Spring与Mybatis整合的环境即可。
 1.3.2 整合Junit步骤
在上述环境的基础上,来对Junit进行整合。
 步骤1:引入依赖
pom.xml
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | <dependency><groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.12</version>
 <scope>test</scope>
 </dependency>
 
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
 <version>5.2.10.RELEASE</version>
 </dependency>
 
 | 
 步骤2:编写测试类
在test\java下创建一个AccountServiceTest,这个名字任意
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | @RunWith(SpringJUnit4ClassRunner.class)
 
 @ContextConfiguration(classes = {SpringConfiguration.class})
 
 public class AccountServiceTest {
 
 @Autowired
 private AccountService accountService;
 
 @Test
 public void testFindById(){
 System.out.println(accountService.findById(1));
 
 }
 @Test
 public void testFindAll(){
 System.out.println(accountService.findAll());
 }
 }
 
 | 
注意:
- 单元测试,如果测试的是注解配置类,则使用@ContextConfiguration(classes = 配置类.class)
- 单元测试,如果测试的是配置文件,则使用@ContextConfiguration(locations={配置文件名,...})
- Junit运行后是基于Spring环境运行的,所以Spring提供了一个专用的类运行器,这个务必要设置,这个类运行器就在Spring的测试专用包中提供的,导入的坐标就是这个东西SpringJUnit4ClassRunner
- 上面两个配置都是固定格式,当需要测试哪个bean时,使用自动装配加载对应的对象,下面的工作就和以前做Junit单元测试完全一样了
 知识点1:@RunWith
| 名称 | @RunWith | 
| 类型 | 测试类注解 | 
| 位置 | 测试类定义上方 | 
| 作用 | 设置JUnit运行器 | 
| 属性 | value(默认):运行所使用的运行期 | 
 知识点2:@ContextConfiguration
| 名称 | @ContextConfiguration | 
| 类型 | 测试类注解 | 
| 位置 | 测试类定义上方 | 
| 作用 | 设置JUnit加载的Spring核心配置 | 
| 属性 | classes:核心配置类,可以使用数组的格式设定加载多个配置类 locations:配置文件,可以使用数组的格式设定加载多个配置文件名称
 |