Spring Boot整合MyBatis

举报
奇遇少年 发表于 2024/02/06 09:39:38 2024/02/06
【摘要】 Spring Boot整合MyBatis为Java开发者提供了一个现代、可维护的持久层解决方案,使得数据库操作变得更加简单、高效。

引言

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

Spring整合MyBatis

  • 引入依赖

<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核心配置

// 使用@Configuration注解标记该类为Spring配置类,用于定义和注册bean。  
@Configuration  
// 使用@ComponentScan注解来指定Spring应扫描的包路径,以查找组件、配置和注解。  
@ComponentScan("com.example")  
// 使用@PropertySource注解来指定外部属性文件的位置,以便从这些文件中加载属性值。  
@PropertySource("jdbc.properties")  
// 定义一个公共类SpringConfig。  
public class SpringConfig {  
  
}

  • MyBatis要交给Spring接管的bean

//定义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数据源

@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格式)

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

  • 数据准备

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

  • 实体类

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String name;
    private String pwd;
}

  • 引入依赖

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

<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中配置数据库连接信息:

#.配置相关信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis01
    username: root
    password: root

  • 配置mybatis相关配置

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径
  type-aliases-package: com.example.pojo # 配置哪个包下的类有默认的别名

  • 编写Mapper接口

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

注意在接口上加上@Mapper @Repository 注解
@Repository
@Mapper
public interface UserMapper {
    public List<User> findAll();
}
  • 编写mapper接口对应的xml文件

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

<?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接口所在的包路径:

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

  • 测试

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

@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的灵活性,轻松构建可维护、高效的持久层。这个强大的组合使得数据库操作更加愉悦,为应对各类业务场景提供了稳健的解决方案。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。