Spring 整合第三方资源

# spring整合mybatis

这里着重就是用spring的纯注解将mybatis的配置文件也化为注解并导入 首先是项目配置文件里面的坐标

<!-- pom.xml -->

<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>8.0.21</version>
</dependency>

<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>
1
2
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

然后是 Spring 注解配置类那一套

// SpringConfig.java

@Configuration
@ComponentScan("com.snopzyz")
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
}
1
2
3
4
5
6
7

这些完成之后我们分析一下 Mybatis 配置文件和使用方式 参考这里 (opens new window)

<!-- mybatis-config.xml -->

<?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"/>

    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.snopzyz.dao"/>
    </mappers>
</configuration>
1
2
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

这里<configuration>标签内的部分是大头

  • <properties>我们已经在 SpringConfig.java 中导入过了
  • <environments>中主要是建立JDBC连接数据库的,我们可以额外写一个 JdbcConfig.java 类生成druidDataSource 连接池
  • <mappers>建立 sql 语句映射,我们额外写一个 MybatisConfig.java 生成 Mapper... 对象

使用部分,为了获取到 SqlSession 我们要有 SqlSessionFactory 来取出会话
其中在 MybatisConfig.java 中利用 SqlSessoinFactoryBean 对象加载 druid 连接池返回后,Spring容器会自动帮我们造出 SqlSession
而 druid 连接池我们可以直接通过 JdbcConfig 的引用类型注入方法获取

有了思路,下面是代码设计

// JdbcConfig.java

package com.snopzyz.config;

import ...;

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;

    /* 设置 druid 信息,返回 druid 连接池 */
    @Bean
    public DruidDataSource dataSource () {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}
1
2
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
// MybatisConfig.java

package com.snopzyz.config;

import ...;

public class MybatisConfig {

    /* 参数自动装配 JdbcConfig.java 内返回 DataSource 的函数,获取 druid 信息
       并返回 SqlSessionFactoryBean 对象给 IoC 容器,生成 SqlSession         */
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean (DataSource dataSource) {
        SqlSessionFactoryBean ssf = new SqlSessionFactoryBean();
        ssf.setDataSource(dataSource);
        return ssf;
    }

    /* 利用生成的 SqlSessoin 通过 Mapper 扫描获取 package 下的所有 Mapper */
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer () {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.snopzyz.dao");
        return msc;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

然后将这两个类通过@Import导入进 SpringConfig.java 即可

接下来就是和正常 Spring 框架一样的使用方法

// App.java

import ...;

public class App {
    public static void main(String[] args) throws IOException {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserDao userDao = (UserDao)ctx.getBean(UserDao.class);
        for (User user : userDao.findAll()) {
            System.out.println(user);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# spring 整合 junit

首先是导入坐标

<!-- pom.xml -->

<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

然后在/src/test/目录下编写测试类StudentServiceTest.java,其中需要加的注解有

  • 使用Spring整合Junit专用的类加载器 @RunWith(SpringJUnit4ClassRunner.class)
  • 标注Spring配置类 @ContextConfiguration(classes = SpringConfig.class)
  • 要被测试的类作为成员属性并使用自动装配
  • 测试的方法上面添加@Test标注

// StudentServiceTest.java

package com.snopzyz.service;

import ...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class StudentServiceTest {

    @Autowired
    private StudentService studentService;

    @Test
    public void testFindAll () {
        System.out.println(studentService.findAll());
    }

    @Test
    public void testFindByNo () {
        System.out.println(studentService.findByNo("542007230126"));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Last Updated: 10/8/2023, 5:27:41 PM