当前位置: 首页 > news >正文

Spring整合Mybatis

        在现代Java企业级应用开发中,Spring框架和MyBatis作为两个极为重要的技术栈,各自发挥着不可替代的作用。Spring框架提供了全面的基础设施支持,包括依赖注入、事务管理、AOP等核心功能,而MyBatis则是一个优秀的持久层框架,以其灵活的SQL映射和简单的API著称。

将这两者整合使用,可以充分发挥各自的优势:

  • Spring的IoC容器可以管理MyBatis的组件生命周期

  • Spring的事务管理能够为MyBatis操作提供声明式事务支持

  • MyBatis的灵活性弥补了Spring Data JPA在某些复杂SQL场景下的不足

  • 简化开发通过整合可以减少大量样板代码,提高开发效率

Spring框架整合Mybatis分为以下这么几步:

  1. 创建maven模块
  2. 导入依赖坐标
  3. 创建Spring配置类
  4. 进行整合测试

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就完成了

http://www.xdnf.cn/news/931213.html

相关文章:

  • WEB3全栈开发——面试专业技能点P3JavaScript / TypeScript
  • 数据库、数据仓库、数据中台、数据湖相关概念
  • MATLAB R2025a|Win中文|仿真建模|安装教程
  • uni-app学习笔记二十三--交互反馈showToast用法
  • Docker 安装 Ubuntu
  • day27-shell编程(自动化)
  • 附加模块--Qt Shader Tools功能及架构解析
  • typeof运算符 +unll和undefined的区别
  • AI书签管理工具开发全记录(十七):Sun-Panel书签同步实现
  • 【ArcGIS Pro微课1000例】0072:如何自动保存编辑内容及保存工程?
  • 68常用控件_QGroupBox的使用
  • C语言中的文件操作
  • Android写一个捕获全局异常的工具类
  • 【hive】函数集锦:窗口函数、列转行、日期函数
  • stm32-c8t6实现语音识别(LD3320)
  • 【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示
  • 【SpringBoot+SpringCloud】Linux配置nacos踩坑大全
  • AI时代:学习永不嫌晚,语言多元共存
  • 思澈sdk-新建lcd
  • LeetCode--25.k个一组翻转链表
  • 从0开始学习R语言--Day20-ARIMA与格兰杰因果检验
  • 【第八篇】 SpringBoot高级配置(配置篇)
  • CZGL.SystemInfo:跨平台的系统信息获取库
  • AUTOSAR实战教程--DoIP_01_配置项解释
  • 0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
  • Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
  • Go基本语法——go语言中的四种变量定义方法
  • 【Java学习笔记】BigInteger 和 BigDecimal 类
  • 【Go语言基础【19】】接口:灵活实现多态的核心机制
  • 基于RT-DETR算法的夜间交通车辆与行人目标检测