Spring Boot整合MyBatis

引言

在现代Java开发中,Spring Boot和MyBatis被广泛使用,它们分别代表了轻量级的企业级开发框架和优秀的持久化框架。本文将探讨如何在Spring Boot项目中整合MyBatis,以构建高效、灵活且易于维护的持久层。通过这一完美结合,开发者能够充分发挥Spring Boot的便捷和MyBatis的灵活,提升开发效率和代码质量。

Spring整合MyBatis

引入依赖
XML 复制代码
<dependencies>
    <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>
    <!--1.导入mybatis与spring整合的jar包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>
    <!--导入spring操作数据库必选的包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
</dependencies>

**注意:**druid 不是必须,按需引入。

Spring核心配置
java 复制代码
// 使用@Configuration注解标记该类为Spring配置类,用于定义和注册bean。  
@Configuration  
// 使用@ComponentScan注解来指定Spring应扫描的包路径,以查找组件、配置和注解。  
@ComponentScan("com.example")  
// 使用@PropertySource注解来指定外部属性文件的位置,以便从这些文件中加载属性值。  
@PropertySource("jdbc.properties")  
// 定义一个公共类SpringConfig。  
public class SpringConfig {  
  
}
MyBatis要交给Spring接管的bean
java 复制代码
//定义mybatis专用的配置类
@Configuration
public class MyBatisConfig {
//    定义创建SqlSessionFactory对应的bean
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        //SqlSessionFactoryBean是由mybatis-spring包提供的,专用于整合用的对象
        SqlSessionFactoryBean sfb = new SqlSessionFactoryBean();
        //设置数据源替代原始配置中的environments的配置
        sfb.setDataSource(dataSource);
        //设置类型别名替代原始配置中的typeAliases的配置
        sfb.setTypeAliasesPackage("com.example.pojo");
        return sfb;
    }
//    定义加载所有的映射配置
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.example.dao");
        return msc;
    }

}
数据源对应的bean,此处使用Druid数据源
java 复制代码
@Configuration
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("dataSource")
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}
数据库连接信息(properties格式)
bash 复制代码
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis
jdbc.username=root
jdbc.password=root
缺点
  1. 配置复杂:相对于 Spring Boot 的自动配置,Spring 需要手动配置 MyBatis 的相关组件,如 SqlSessionFactory、Mapper 等。这需要开发人员对 MyBatis 和 Spring 有更深入的了解。
  2. 依赖管理不便:在 Spring 中,需要手动添加和管理 MyBatis 和其他相关库的依赖。而在 Spring Boot 中,通过自动配置和集成的依赖管理,可以更方便地管理和升级这些库的版本。

Spring Boot整合MyBatis

数据准备
sql 复制代码
CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `pwd` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
实体类

创建与数据库表对应的实体类

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String name;
    private String pwd;
}
引入依赖

pom.xml中添加Spring Boot和MyBatis的相关依赖:

XML 复制代码
<dependencies>
        <!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!-- MySQL Connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
</dependencies>
配置数据库信息

application.propertiesapplication.yml中配置数据库连接信息:

java 复制代码
#.配置相关信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis01
    username: root
    password: root
配置mybatis相关配置
java 复制代码
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径
  type-aliases-package: com.example.pojo # 配置哪个包下的类有默认的别名
编写Mapper接口

创建Mapper接口,定义对数据库的操作,使用@Mapper注解标明该接口是MyBatis的Mapper。
注意在接口上加上 @Mapper 和 @Repository 注解

java 复制代码
@Repository
@Mapper
public interface UserMapper {
    public List<User> findAll();
}
编写mapper接口对应的xml文件

在resources目录下创建mapper/UserMapper.xml文件,编写SQL语句,定义与Mapper接口中方法对应的数据库操作。

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findAll" resultType="com.example.pojo.User">
        select * from user
    </select>
</mapper>
编写Spring Boot 主启动类

在Spring Boot的主应用类上添加@MapperScan注解,指定Mapper接口所在的包路径:

java 复制代码
@MapperScan( basePackages = "com.example.mapper")
@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}
测试

编写单元测试,验证MyBatis的持久化操作,确保整合的正确性。在业务层中注入UserMapper,即可通过调用Mapper接口的方法进行数据库操作。

java 复制代码
@SpringBootTest(classes = UserApplication.class)
public class MyTest {
    @Autowired
    UserMapper userMapper;
    @Test
    public void tesMapper(){
        System.out.println(userMapper.findAll());
    }
}

通过以上步骤,你已成功地将Spring Boot与MyBatis整合,构建了一个高效的持久层。这个结合体为开发者提供了Spring Boot的便捷配置和MyBatis的灵活性,使得数据库操作更加轻松、高效。在实际应用中,通过使用MyBatis的动态SQL、缓存机制等高级特性,可以更灵活地满足各种业务需求。

结语

Spring Boot整合MyBatis是构建现代Java应用的常见实践,本文详细介绍了整合的基础配置和操作步骤。通过这一结合,开发者可以借助Spring Boot的自动化配置和MyBatis的灵活性,轻松构建可维护、高效的持久层。这个强大的组合使得数据库操作更加愉悦,为应对各类业务场景提供了稳健的解决方案。

相关推荐
ok!ko3 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2401_857622663 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589363 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰4 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没5 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
编程、小哥哥5 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程6 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇6 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码6 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
郭二哈7 小时前
C++——模板进阶、继承
java·服务器·c++