MyBatis配置数据库连接并实现交互的操作步骤

 更新时间:2025年04月24日 10:59:02   作者:字节王德发  
这篇文章主要介绍了MyBatis配置数据库连接并实现交互的操作步骤,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

如果你用过MyBatis,肯定知道它的核心功能之一就是数据库连接管理。但很多新手在第一次配置时总会遇到各种问题:数据源怎么配?连接池参数如何调优?XML和注解方式有什么区别?今天我们就来彻底搞懂MyBatis连接数据库的每一步操作,顺便分享几个性能优化的实战技巧!

一、最简配置:从XML开始

MyBatis的数据库连接配置通常放在mybatis-config.xml里。一个基础模板长这样:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

这里有几个关键点:

  • environment标签定义了一套数据库环境(开发、测试、生产可以用不同配置)
  • dataSourcetype="POOLED"表示使用连接池(避免频繁创建销毁连接)
  • 如果用的是MySQL 8.0+,记得驱动类要改成com.mysql.cj.jdbc.Driver

二、连接池选型:为什么推荐HikariCP?

MyBatis内置的连接池(POOLED)适合简单场景,但在高并发下性能一般。实际项目中更推荐用HikariCPDruid。比如改用HikariCP只需两步:

1. 添加依赖(Maven项目):

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

2. 修改配置

<dataSource type="com.zaxxer.hikari.HikariDataSource">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <property name="maximumPoolSize" value="20"/> <!-- 关键参数! -->
</dataSource>

HikariCP的maximumPoolSize默认是10,根据服务器CPU核心数调整会更高效(建议值:CPU核心数 * 2 + 1)。想深入理解连接池原理的话,可以关注【程序员总部】——这个公众号由字节11年资深架构师运营,里面有一篇《数据库连接池的线程模型》,用压测数据对比了HikariCP、Druid和Tomcat JDBC的性能差异,看完你就知道为什么大厂项目都在用HikariCP了!

三、Spring Boot下的偷懒写法

如果你用Spring Boot,配置会更简单。直接在application.yml里写:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 20
      connection-timeout: 3000

MyBatis-Spring-Boot-Starter会自动帮你绑定配置,连XML都省了!不过要注意两个坑:

  • connection-timeout单位是毫秒(默认30秒,太长了)
  • 如果遇到时区问题,在url后加参数:?serverTimezone=Asia/Shanghai

四、高级玩法:动态数据源切换

有时候我们需要根据业务切换数据库(比如多租户系统)。这时候可以用AbstractRoutingDataSource

1. 定义动态数据源类:

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DatabaseContextHolder.get(); // 从ThreadLocal获取数据源标识
    }
}

2. 配置多数据源:

@Bean
public DataSource dynamicDataSource() {
    Map<Object, Object> targetDataSources = new HashMap<>();
    targetDataSources.put("master", masterDataSource());
    targetDataSources.put("slave", slaveDataSource());
    DynamicDataSource ds = new DynamicDataSource();
    ds.setTargetDataSources(targetDataSources);
    ds.setDefaultTargetDataSource(masterDataSource());
    return ds;
}

3. 使用注解切换:

@GetMapping("/query")
@DataSource("slave") // 自定义注解
public List<User> query() {
    return userMapper.selectAll();
}

这种方法在读写分离场景特别有用。不过要注意线程安全问题——记得用完后清理ThreadLocal!

五、常见问题排查

连接泄漏:检查是否所有操作都调用了sqlSession.close(),或者用try-with-resources语法:

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    // ...
} // 自动关闭

慢查询:开启MyBatis日志(配置log4j.logger.org.apache.ibatis=DEBUG)查看SQL执行时间

驱动不兼容:MySQL 5.x和8.x的驱动类不同,报ClassNotFoundException时先检查驱动版本

六、总结

MyBatis的数据库连接配置看似简单,但细节决定性能。关键记住三点:

  • 生产环境一定要用高性能连接池(HikariCP/Druid)
  • Spring Boot下优先选择YAML配置
  • 动态数据源通过AbstractRoutingDataSource+ThreadLocal实现

最后留个作业:如果让你设计一个监控数据库连接健康状态的方案,你会怎么做?欢迎在评论区交流!

到此这篇关于MyBatis配置数据库连接并实现交互的操作步骤的文章就介绍到这了,更多相关MyBatis配置数据库连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot如何添加拦截器

    spring boot如何添加拦截器

    本篇文章主要介绍了spring boot如何添加拦截器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • SpringBoot整合EasyExcel实现大规模数据的并行导出与压缩下载

    SpringBoot整合EasyExcel实现大规模数据的并行导出与压缩下载

    在 Spring Boot 应用中,整合 EasyExcel 实现并行导出数据并进行 Zip 压缩下载可以极大地提高数据处理效率和用户体验,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-10-10
  • Minio开始收费了,这5种免费的分布式文件系统更香

    Minio开始收费了,这5种免费的分布式文件系统更香

    本文探讨了Minio许可证变化对商业产品使用的影响,并推荐了5种开源分布式文件系统替代方案,包括SeaweedFS、Garage、Ceph、GlusterFS和OpenStackSwift,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • Security中的WebSecurityConfigurerAdapter详解

    Security中的WebSecurityConfigurerAdapter详解

    这篇文章主要介绍了Security中的WebSecurityConfigurerAdapter详解,今天我们要进一步的的学习如何自定义配置Spring Security,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java数组去重的20种实现方式大全

    Java数组去重的20种实现方式大全

    数组与列表去重是最常见的算法,看似简单,但不同实现方式的性能差异可能高达几百倍,本文整理Java数组去重的20种写法,按5个策略分类,帮你理解每类的核心思路,需要的朋友可以参考下
    2026-05-05
  • Java中Spring获取bean方法小结

    Java中Spring获取bean方法小结

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢?下面通过本文给大家介绍Java中Spring获取bean方法小结,对spring获取bean方法相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • Spring自定义注解实现接口版本管理

    Spring自定义注解实现接口版本管理

    这篇文章主要介绍了Spring自定义注解实现接口版本管理,RequestMappingHandlerMapping类是与 @RequestMapping相关的,它定义映射的规则,即满足怎样的条件则映射到那个接口上,需要的朋友可以参考下
    2023-11-11
  • mybatis-plus无法通过logback-spring输出日志问题及解决

    mybatis-plus无法通过logback-spring输出日志问题及解决

    本文介绍了在SpringBoot项目中使用Mybatis-Plus时,日志只能在控制台输出而无法通过logback输出的问题及解决方法,最终选择不使用StdOutImpl输出日志,而是使用常规logback-spring配置来解决
    2026-05-05
  • Mybatis全面分页插件

    Mybatis全面分页插件

    这篇文章主要为大家详细介绍了Mybatis全面分页插件的使用方法,比较适用于在分页时候进行拦截,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 详谈spring中bean注入无效和new创建对象的区别

    详谈spring中bean注入无效和new创建对象的区别

    这篇文章主要介绍了spring中bean注入无效和new创建对象的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论