在现代Java企业级应用开发中,Spring框架和MyBatis作为两个极为重要的技术栈,各自发挥着不可替代的作用。Spring框架提供了全面的基础设施支持,包括依赖注入、事务管理、AOP等核心功能,而MyBatis则是一个优秀的持久层框架,以其灵活的SQL映射和简单的API著称。
将这两者整合使用,可以充分发挥各自的优势:
-
Spring的IoC容器可以管理MyBatis的组件生命周期
-
Spring的事务管理能够为MyBatis操作提供声明式事务支持
-
MyBatis的灵活性弥补了Spring Data JPA在某些复杂SQL场景下的不足
-
简化开发通过整合可以减少大量样板代码,提高开发效率
Spring框架整合Mybatis分为以下这么几步:
- 创建maven模块
- 导入依赖坐标
- 创建Spring配置类
- 进行整合测试
1.创建模块
2. 导入依赖坐标
<!-- Spring上下文支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.12</version>
</dependency>
<!-- Java Activation Framework API -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
<!-- MyBatis 核心库 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MyBatis 与 Spring 集成 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
<!-- MySQL JDBC驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- 阿里巴巴数据库连接池 druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.20</version>
</dependency>
<!-- Spring JDBC 支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.1.12</version>
</dependency>
<!-- Spring 测试支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.1.14</version>
</dependency>
<!-- 单元测试框架JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- Lombok 简化Java实体类开发 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
3. 创建核心配置类
package com.it.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
// 扫描包
@ComponentScan("com.it")
public class SpringConfig {
}
到此,Spring框架创建成功了
4. Spring整合
4.1 整合jdbc(数据库)
1)首先需要在jdbc.properties配置文件中配置需要连接的数据库,连接池,用户名密码
# 数据库连接URL,使用MySQL数据库,连接到本地的db1数据库
jdbc.url=jdbc:mysql:///db1
# JDBC驱动类名,使用的是com.mysql.jdbc.Driver
jdbc.driver=com.mysql.jdbc.Driver
# 数据库用户名,用于连接数据库的用户为root
jdbc.username=root
# 数据库密码,连接数据库的密码为1234
jdbc.password=1234
2)在jdbc整合配置类中扫描配置类,拿到数据库相关信息
package com.it.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
//1.扫描配置文件
@PropertySource("jdbc.properties")
public class JdbcConfig {
// 2.属性注入
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
// 使用工厂实例化整合 druid
/**
* 创建并配置Druid数据源实例
* 通过@Bean注解将数据源对象纳入Spring容器管理
* @return 配置好的DruidDataSource实例
*/
@Bean
public DruidDataSource getDruidDataSource() {
// 实例化Druid数据源对象
DruidDataSource dataSource = new DruidDataSource();
// 设置数据库驱动类名
dataSource.setDriverClassName(driver);
// 设置数据库连接URL
dataSource.setUrl(url);
// 设置数据库登录用户名
dataSource.setUsername(username);
// 设置数据库登录密码
dataSource.setPassword(password);
// 返回配置完成的数据源实例
return dataSource;
}
}
测试一下
至此,数据库就整合完了✌
4.2 整合Mybatis
整合Mybatis分为两步
- 整合核心配置文件
- 整合映射配置文件
在MybatisConfig配置类中进行以下配置
package com.it.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class MybatisConfig {
/**
* 核心配置
* 配置 SqlSessionFactoryBean,用于集成 MyBatis 与 Spring
* @param dataSource 自动注入的数据源
* @return 配置好的 SqlSessionFactoryBean 实例
*/
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource) {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
// 设置数据源
ssfb.setDataSource(dataSource);
return ssfb;
}
/**
* 映射配置
* Mapper 扫描配置
* 配置 Mapper 接口的扫描路径,用于自动注册 Mapper 接口为 Spring Bean
* @return 配置好的 MapperScannerConfigurer 实例
*/
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
// 设置 Mapper 接口所在的基包路径
msc.setBasePackage("com.it.mapper");
return msc;
}
}
创建pojo、mapper进行测试
- pojo实体类
package com.it.pojo;
import lombok.Data;
@Data
public class Dept {
private int id;
private String dname;
private String loc;
}
- mapper层
package com.it.mapper;
import com.it.pojo.Dept;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface DeptMapper {
@Select("select * from dept")
public List<Dept> findAll();
}
- test测试
package com.it;
import com.alibaba.druid.pool.DruidDataSource;
import com.it.config.SpringConfig;
import com.it.mapper.DeptMapper;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) throws SQLException {
AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig.class);
DeptMapper deptMapper = ioc.getBean(DeptMapper.class);
System.out.println(deptMapper.findAll());
}
}
成功打印✌
4.3 整合junit测试
package com.it.mapper;
import com.it.config.SpringConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
/**
* spring整合junit测试
* @RunWith 在测试启动的时候 加载spring容器
* @ContextConfiguration 配置spring容器
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class DeptMapperTest {
@Autowired
private DeptMapper deptMapper;
@Test
public void findAll() {
System.out.println(deptMapper.findAll());
}
}
到现在Spring整合Mybatis就完成了