欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis配置數(shù)據(jù)庫連接并實(shí)現(xiàn)交互的操作步驟

 更新時(shí)間:2025年04月24日 10:59:02   作者:字節(jié)王德發(fā)  
這篇文章主要介紹了MyBatis配置數(shù)據(jù)庫連接并實(shí)現(xiàn)交互的操作步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

如果你用過MyBatis,肯定知道它的核心功能之一就是數(shù)據(jù)庫連接管理。但很多新手在第一次配置時(shí)總會(huì)遇到各種問題:數(shù)據(jù)源怎么配?連接池參數(shù)如何調(diào)優(yōu)?XML和注解方式有什么區(qū)別?今天我們就來徹底搞懂MyBatis連接數(shù)據(jù)庫的每一步操作,順便分享幾個(gè)性能優(yōu)化的實(shí)戰(zhàn)技巧!

一、最簡配置:從XML開始

MyBatis的數(shù)據(jù)庫連接配置通常放在mybatis-config.xml里。一個(gè)基礎(chǔ)模板長這樣:

<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>

這里有幾個(gè)關(guān)鍵點(diǎn):

  • environment標(biāo)簽定義了一套數(shù)據(jù)庫環(huán)境(開發(fā)、測試、生產(chǎn)可以用不同配置)
  • dataSourcetype="POOLED"表示使用連接池(避免頻繁創(chuàng)建銷毀連接)
  • 如果用的是MySQL 8.0+,記得驅(qū)動(dòng)類要改成com.mysql.cj.jdbc.Driver

二、連接池選型:為什么推薦HikariCP?

MyBatis內(nèi)置的連接池(POOLED)適合簡單場景,但在高并發(fā)下性能一般。實(shí)際項(xiàng)目中更推薦用HikariCPDruid。比如改用HikariCP只需兩步:

1. 添加依賴(Maven項(xiàng)目):

<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"/> <!-- 關(guān)鍵參數(shù)! -->
</dataSource>

HikariCP的maximumPoolSize默認(rèn)是10,根據(jù)服務(wù)器CPU核心數(shù)調(diào)整會(huì)更高效(建議值:CPU核心數(shù) * 2 + 1)。想深入理解連接池原理的話,可以關(guān)注【程序員總部】——這個(gè)公眾號由字節(jié)11年資深架構(gòu)師運(yùn)營,里面有一篇《數(shù)據(jù)庫連接池的線程模型》,用壓測數(shù)據(jù)對比了HikariCP、Druid和Tomcat JDBC的性能差異,看完你就知道為什么大廠項(xiàng)目都在用HikariCP了!

三、Spring Boot下的偷懶寫法

如果你用Spring Boot,配置會(huì)更簡單。直接在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會(huì)自動(dòng)幫你綁定配置,連XML都省了!不過要注意兩個(gè)坑:

  • connection-timeout單位是毫秒(默認(rèn)30秒,太長了)
  • 如果遇到時(shí)區(qū)問題,在url后加參數(shù):?serverTimezone=Asia/Shanghai

四、高級玩法:動(dòng)態(tài)數(shù)據(jù)源切換

有時(shí)候我們需要根據(jù)業(yè)務(wù)切換數(shù)據(jù)庫(比如多租戶系統(tǒng))。這時(shí)候可以用AbstractRoutingDataSource

1. 定義動(dòng)態(tài)數(shù)據(jù)源類:

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DatabaseContextHolder.get(); // 從ThreadLocal獲取數(shù)據(jù)源標(biāo)識
    }
}

2. 配置多數(shù)據(jù)源:

@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!

五、常見問題排查

連接泄漏:檢查是否所有操作都調(diào)用了sqlSession.close(),或者用try-with-resources語法:

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    // ...
} // 自動(dòng)關(guān)閉

慢查詢:開啟MyBatis日志(配置log4j.logger.org.apache.ibatis=DEBUG)查看SQL執(zhí)行時(shí)間

驅(qū)動(dòng)不兼容:MySQL 5.x和8.x的驅(qū)動(dòng)類不同,報(bào)ClassNotFoundException時(shí)先檢查驅(qū)動(dòng)版本

六、總結(jié)

MyBatis的數(shù)據(jù)庫連接配置看似簡單,但細(xì)節(jié)決定性能。關(guān)鍵記住三點(diǎn):

  • 生產(chǎn)環(huán)境一定要用高性能連接池(HikariCP/Druid)
  • Spring Boot下優(yōu)先選擇YAML配置
  • 動(dòng)態(tài)數(shù)據(jù)源通過AbstractRoutingDataSource+ThreadLocal實(shí)現(xiàn)

最后留個(gè)作業(yè):如果讓你設(shè)計(jì)一個(gè)監(jiān)控?cái)?shù)據(jù)庫連接健康狀態(tài)的方案,你會(huì)怎么做?歡迎在評論區(qū)交流!

到此這篇關(guān)于MyBatis配置數(shù)據(jù)庫連接并實(shí)現(xiàn)交互的操作步驟的文章就介紹到這了,更多相關(guān)MyBatis配置數(shù)據(jù)庫連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring中的@Value讀取配置文件的細(xì)節(jié)處理過程

    spring中的@Value讀取配置文件的細(xì)節(jié)處理過程

    這篇文章主要介紹了spring中的@Value讀取配置文件的細(xì)節(jié)處理過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 在JDK和Eclipse下如何編寫和運(yùn)行Java Applet

    在JDK和Eclipse下如何編寫和運(yùn)行Java Applet

    本文主要介紹了在JDK和Eclipse的環(huán)境下如何編寫和運(yùn)行Java Applet,圖文方式,適合初學(xué)者學(xué)習(xí)。
    2015-09-09
  • 詳解Spring Boot下使用logback 記錄多個(gè)文件日志

    詳解Spring Boot下使用logback 記錄多個(gè)文件日志

    這篇文章主要介紹了詳解Spring Boot下使用logback 記錄多個(gè)文件日志,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java?泛型的上界和下界通配符示例詳解

    Java?泛型的上界和下界通配符示例詳解

    這篇文章主要為大家通過示例介紹了Java?泛型的上界和下界通配符,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • JAVA JVM面試題總結(jié)

    JAVA JVM面試題總結(jié)

    JVM 可以屏蔽與具體操作系統(tǒng)平臺相關(guān)的信息,使 Java 程序只需生成在 Java 虛擬機(jī)上運(yùn)行的目標(biāo)代碼,就可以在不同的平臺上運(yùn)行。這篇文章主要介紹了JAVA JVM面試題總結(jié),大家可以參考一下
    2021-08-08
  • Jrebel啟動(dòng)失敗解決方案詳解

    Jrebel啟動(dòng)失敗解決方案詳解

    這篇文章主要介紹了Jrebel啟動(dòng)失敗解決方案詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中關(guān)于字典樹的算法實(shí)現(xiàn)

    Java中關(guān)于字典樹的算法實(shí)現(xiàn)

    字典樹,又稱單詞查找樹,Trie樹,是一種樹形結(jié)構(gòu),哈希表的一個(gè)變種。用于統(tǒng)計(jì),排序和保存大量的字符串,本文針對字典樹給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • 超詳細(xì)解釋Java反射

    超詳細(xì)解釋Java反射

    本文非常詳細(xì)的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • 搭建Springboot框架并添加JPA和Gradle組件的方法

    搭建Springboot框架并添加JPA和Gradle組件的方法

    這篇文章主要介紹了搭建Springboot框架并添加JPA和Gradle組件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論