找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

428

积分

0

好友

62

主题
发表于 3 天前 | 查看: 7| 回复: 0

本文将系统性地讲解如何在SpringBoot项目中整合MyBatis,涵盖从依赖引入、数据源配置到Mapper编写、事务管理的全过程,帮助您快速搭建高效的数据访问层。

核心依赖配置

在SpringBoot项目的pom.xml文件中,需要添加以下核心依赖以支持MyBatis和数据库连接:

<!-- MyBatis 整合 SpringBoot 的 Starter 依赖 -->
<!-- 自动配置 MyBatis 核心组件,简化整合流程 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

<!-- MySQL 数据库驱动 -->
<!-- 运行时生效,用于建立与 MySQL 数据库的连接 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Druid 连接池 Starter -->
<!-- 提供高性能数据源管理,包含连接池监控等功能 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

数据源配置

properties 格式配置
# 数据库连接核心参数
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Druid 连接池配置(可选)
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1
yaml 格式配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

    druid:
      initial-size: 5       # 初始化连接数
      min-idle: 5           # 最小空闲连接数
      max-active: 20        # 最大活跃连接数
      max-wait: 60000       # 最大等待时间(毫秒)

MyBatis 核心配置

properties 格式配置
# MyBatis 基础配置
mybatis.type-aliases-package=com.example.entity
mybatis.mapper-locations=classpath:mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
logging.level.com.example.mapper=debug
yaml 格式配置
mybatis:
  type-aliases-package: com.example.entity  # 实体类别名扫描包
  mapper-locations: classpath:mapper/**/*.xml  # XML 映射文件路径
  configuration:
    map-underscore-to-camel-case: true  # 开启下划线转驼峰映射
logging:
  level:
    com.example.mapper: debug  # 开启 Mapper 日志打印

Mapper 接口配置

MyBatis 提供两种方式注册 Mapper 接口,任选其一即可。

方式一:@Mapper 注解

在每个 Mapper 接口上添加@Mapper注解,声明为 MyBatis 映射接口:

package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface UserMapper {
    List<User> findAll();
    User findById(Integer id);
    int insert(User user);
    int update(User user);
    int delete(Integer id);
}
方式二:@MapperScan 注解

在启动类或配置类上添加@MapperScan注解,批量扫描 Mapper 接口。这是SpringBoot项目中常用的方式,能简化配置。

package com.example;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

XML 映射文件配置

基础 XML 示例

XML映射文件通常存放在resources/mapper/目录下,并通过配置项mybatis.mapper-locations指定扫描路径。

<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="UserResultMap" type="User">
        <id column="id" property="id"/>
        <result column="user_name" property="userName"/>
        <result column="password" property="password"/>
        <result column="email" property="email"/>
    </resultMap>

    <select id="findAll" resultType="User">
        SELECT * FROM user
    </select>

    <select id="findById" parameterType="int" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="User">
        INSERT INTO user(user_name, password, email)
        VALUES(#{userName}, #{password}, #{email})
    </insert>

    <update id="update" parameterType="User">
        UPDATE user
        SET user_name = #{userName}, password = #{password}, email = #{email}
        WHERE id = #{id}
    </update>

    <delete id="delete" parameterType="int">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>
自定义映射关系

当数据库字段名与实体类属性名不一致时,可以通过resultMap手动配置映射关系,这是处理复杂映射的常用技巧。

<resultMap id="UserResultMap" type="User">
    <id column="id" property="id"/>
    <result column="user_name" property="userName"/>
    <result column="pwd" property="password"/>
</resultMap>
<select id="findById" parameterType="int" resultMap="UserResultMap">
    SELECT * FROM user WHERE id = #{id}
</select>

注解式 SQL 编写

除 XML 外,也可直接在 Mapper 接口中使用注解编写 SQL 语句,这种方式适合简单的SQL操作。

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> findAll();

    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Integer id);

    @Insert("INSERT INTO user(user_name, password, email) VALUES(#{userName}, #{password}, #{email})")
    int insert(User user);

    @Update("UPDATE user SET user_name = #{userName}, password = #{password}, email = #{email} WHERE id = #{id}")
    int update(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    int delete(Integer id);
}

自定义 MyBatis 配置类

对于更复杂的定制需求,可以通过创建配置类来灵活定义 MyBatis 的行为,例如自定义插件或类型处理器。

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(
            new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/**/*.xml")
        );
        factoryBean.setTypeAliasesPackage("com.example.entity");
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        factoryBean.setConfiguration(configuration);
        return factoryBean.getObject();
    }
}

事务管理配置

在 Service 层通过@Transactional注解即可便捷地开启声明式事务管理,这是保证数据一致性的关键。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    @Transactional
    public int insert(User user) {
        return userMapper.insert(user);
    }

    @Override
    @Transactional
    public int update(User user) {
        return userMapper.update(user);
    }
}

配置检查清单

整合完成后,建议进行以下检查以确保一切就绪:

  1. 依赖兼容性:确认 MyBatis Starter 与 SpringBoot 版本匹配。
  2. 数据库连接:核对application.properties/yaml中的数据库地址、用户名和密码。
  3. 映射一致性:检查 Mapper 接口的namespace与对应XML文件中的声明是否一致。
  4. SQL准确性:确保SQL语句中的字段名、表名与数据库中的实际结构相符。

通过遵循上述步骤,您可以在SpringBoot项目中快速、稳健地完成MyBatis的整合,构建出清晰高效的数据持久层。




上一篇:SQLark数据库管理工具实战指南:智能SQL补全与AI辅助开发运维
下一篇:Go源码解析strings.Builder:高效字符串构建与内存管理底层原理
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 03:45 , Processed in 0.073837 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表