最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、最簡配置:從XML開始

MyBatis的數(shù)據(jù)庫連接配置通常放在mybatis-config.xml里。一個基礎(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>

這里有幾個關(guān)鍵點:

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

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

MyBatis內(nèi)置的連接池(POOLED)適合簡單場景,但在高并發(fā)下性能一般。實際項目中更推薦用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"/> <!-- 關(guān)鍵參數(shù)! -->
</dataSource>

HikariCP的maximumPoolSize默認是10,根據(jù)服務(wù)器CPU核心數(shù)調(diào)整會更高效(建議值:CPU核心數(shù) * 2 + 1)。想深入理解連接池原理的話,可以關(guān)注【程序員總部】——這個公眾號由字節(jié)11年資深架構(gòu)師運營,里面有一篇《數(shù)據(jù)庫連接池的線程模型》,用壓測數(shù)據(jù)對比了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秒,太長了)
  • 如果遇到時區(qū)問題,在url后加參數(shù):?serverTimezone=Asia/Shanghai

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

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

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

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

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);
    // ...
} // 自動關(guān)閉

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

驅(qū)動不兼容:MySQL 5.x和8.x的驅(qū)動類不同,報ClassNotFoundException時先檢查驅(qū)動版本

六、總結(jié)

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

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

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

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

相關(guān)文章

  • spring boot如何添加攔截器

    spring boot如何添加攔截器

    本篇文章主要介紹了spring boot如何添加攔截器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • SpringBoot整合EasyExcel實現(xiàn)大規(guī)模數(shù)據(jù)的并行導出與壓縮下載

    SpringBoot整合EasyExcel實現(xiàn)大規(guī)模數(shù)據(jù)的并行導出與壓縮下載

    在 Spring Boot 應(yīng)用中,整合 EasyExcel 實現(xiàn)并行導出數(shù)據(jù)并進行 Zip 壓縮下載可以極大地提高數(shù)據(jù)處理效率和用戶體驗,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • Minio開始收費了,這5種免費的分布式文件系統(tǒng)更香

    Minio開始收費了,這5種免費的分布式文件系統(tǒng)更香

    本文探討了Minio許可證變化對商業(yè)產(chǎn)品使用的影響,并推薦了5種開源分布式文件系統(tǒng)替代方案,包括SeaweedFS、Garage、Ceph、GlusterFS和OpenStackSwift,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Security中的WebSecurityConfigurerAdapter詳解

    Security中的WebSecurityConfigurerAdapter詳解

    這篇文章主要介紹了Security中的WebSecurityConfigurerAdapter詳解,今天我們要進一步的的學習如何自定義配置Spring?Security,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java數(shù)組去重的20種實現(xiàn)方式大全

    Java數(shù)組去重的20種實現(xiàn)方式大全

    數(shù)組與列表去重是最常見的算法,看似簡單,但不同實現(xiàn)方式的性能差異可能高達幾百倍,本文整理Java數(shù)組去重的20種寫法,按5個策略分類,幫你理解每類的核心思路,需要的朋友可以參考下
    2026-05-05
  • Java中Spring獲取bean方法小結(jié)

    Java中Spring獲取bean方法小結(jié)

    Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,如何在程序中獲取Spring配置的bean呢?下面通過本文給大家介紹Java中Spring獲取bean方法小結(jié),對spring獲取bean方法相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • Spring自定義注解實現(xiàn)接口版本管理

    Spring自定義注解實現(xiàn)接口版本管理

    這篇文章主要介紹了Spring自定義注解實現(xiàn)接口版本管理,RequestMappingHandlerMapping類是與 @RequestMapping相關(guān)的,它定義映射的規(guī)則,即滿足怎樣的條件則映射到那個接口上,需要的朋友可以參考下
    2023-11-11
  • mybatis-plus無法通過logback-spring輸出日志問題及解決

    mybatis-plus無法通過logback-spring輸出日志問題及解決

    本文介紹了在SpringBoot項目中使用Mybatis-Plus時,日志只能在控制臺輸出而無法通過logback輸出的問題及解決方法,最終選擇不使用StdOutImpl輸出日志,而是使用常規(guī)logback-spring配置來解決
    2026-05-05
  • Mybatis全面分頁插件

    Mybatis全面分頁插件

    這篇文章主要為大家詳細介紹了Mybatis全面分頁插件的使用方法,比較適用于在分頁時候進行攔截,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 詳談spring中bean注入無效和new創(chuàng)建對象的區(qū)別

    詳談spring中bean注入無效和new創(chuàng)建對象的區(qū)別

    這篇文章主要介紹了spring中bean注入無效和new創(chuàng)建對象的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

阿瓦提县| 鱼台县| 昌吉市| 二连浩特市| 尖扎县| 阿鲁科尔沁旗| 渑池县| 阿荣旗| 肇州县| 洞口县| 秭归县| 肥西县| 宿州市| 苏州市| 定襄县| 加查县| 嘉禾县| 敖汉旗| 临桂县| 洞口县| 色达县| 平阴县| 廊坊市| 海丰县| 牡丹江市| 文水县| 石城县| 卓尼县| 顺昌县| 资阳市| 五指山市| 敖汉旗| 枣强县| 晋州市| 墨玉县| 怀仁县| 额尔古纳市| 公主岭市| 漳浦县| 北海市| 太仓市|