Spring整合Mybatis
在现代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实例*/@Beanpublic DruidDataSource getDruidDataSource() {// 实例化Druid数据源对象DruidDataSource dataSource = new DruidDataSource();// 设置数据库驱动类名dataSource.setDriverClassName(driver);// 设置数据库连接URLdataSource.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 实例*/@Beanpublic SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource) {SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();// 设置数据源ssfb.setDataSource(dataSource);return ssfb;}/*** 映射配置* Mapper 扫描配置* 配置 Mapper 接口的扫描路径,用于自动注册 Mapper 接口为 Spring Bean* @return 配置好的 MapperScannerConfigurer 实例*/@Beanpublic 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 {@Autowiredprivate DeptMapper deptMapper;@Testpublic void findAll() {System.out.println(deptMapper.findAll());}
}
到现在Spring整合Mybatis就完成了