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

2025-05-14 08:37:01 137
魁首哥

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

一、最简配置:从xml开始

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


    
        
            
            
                
                
                
                
            
        
    

这里有几个关键点:

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

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

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

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


    com.zaxxer
    hikaricp
    5.0.1

2. 修改配置


    
    
    
     

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 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 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配置数据库连接内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

分享
海报
137
上一篇:Java常用正则表达式(身份证号、邮箱、手机号)格式校验代码示例 下一篇:一文带你深入解析Java应用线程转储

忘记密码?

图形验证码