MyBatis初級實戰之三:集成druid

2020-08-28 程式設計師欣宸

歡迎訪問我的github

https://github.com/zq2599/blog_demos

內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

本篇概覽

本文是《mybatis初級實戰》系列的第三篇,我們將實戰springboot、mybatis、druid的集成,並驗證,由以下內容組成:

  1. 新建springboot工程,裡面有詳細的集成druid的操作;
  2. 編寫和執行單元測試代碼,並規避一個由集成druid帶來的問題;
  3. 啟動springboot應用,通過swagger驗證基本功能正常;
  4. 通過斷點,確認使用了druid連接池;
  5. 體驗druid提供的監控頁面;

關於druid

  1. Druid是資料庫連接池,並且能夠提供強大的監控和擴展功能;
  2. 官方GitHub地址:https://github.com/alibaba/druid
  3. 本次集成使用了durid官方的starter,名為druid-spring-boot-starter,版本1.1.17,對應druid版本是1.1.17

源碼下載

  • 如果您不想編碼,可以在GitHub下載所有源碼,地址和連結信息如下表所示(
    https://github.com/zq2599/blog_demos):
    • 這個git項目中有多個文件夾,《MyBatis初級實戰》系列的源碼在mybatis文件夾下,如下圖紅框所示:

    springboot+mybatis+druid+swagger集成步驟小結

    編碼前,咱們將整個集成所需步驟列舉如下,避免遺漏:

    1. 創建springboot工程;
    2. pom.xml中加入mybaits、druid、swagger依賴;
    3. 配置mybatis-config.xml;
    4. 配置application.yml,裡面有數據源、mybatis、druid;
    5. springboot啟動類,指定MapperScan;
    6. swagger配置類;
    7. druid配置類;
    8. 資料庫實體類;
    9. mybatis的mapper配置文件;
    10. mybatis的mapper類;
    11. 業務代碼;
    • 後續按照上述清單進行開發即可;

    開發

    • 本文的實戰使用的資料庫和表結構與《 》一模一樣;
    • 前文《 》創建了父工程mybatis,本文繼續在此工程中新增子工程,名為druidonesource,整個子工程文件結構如下:

    • 在父工程中添加druid的版本管理:

    <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.17</version> </dependency>

    • 新工程druidonesource的pom.xml內容如下:

    <?xml version=&34; encoding=&34;?><project xmlns=&34; xmlns:xsi=&34; xsi:schemaLocation=&34;> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.bolingcavalry</groupId> <artifactId>mybatis</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>druidonesource</artifactId> <version>0.0.1-SNAPSHOT</version> <name>druidonesource</name> <description>Demo project for Mybatis Druid (one datasource) in Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <!-- swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>

    • 新建mybatis-config.xml:

    <!DOCTYPE configuration PUBLIC &34; &34;><configuration> <typeAliases> <!-- 映射文件中的類不用寫全路徑了--> <package name=&34;/> </typeAliases></configuration>

    • 配置application.yml,請重點關注druid的配置,還請注意stat-view-servlet,這裡是druid監控頁面的登錄配置:

    server: port: 8080spring: 2.連接池配置 druid: 配置獲取連接等待超時的時間 max-wait: 60000 配置一個連接在池中最小生存的時間,單位是毫秒 min-evictable-idle-time-millis: 30000 是否緩存preparedStatement,也就是PSCache 官方建議MySQL下建議關閉 個人建議如果想用SQL防火牆 建議打開 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 39;wall&3.基礎監控配置 web-stat-filter: enabled: true url-pattern: /* 34;*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*&設置監控頁面的登錄名和密碼 login-username: admin login-password: admin allow: 127.0.0.1 mybatis配置mybatis: 映射文件所在位置 mapper-locations: classpath:mappers/*Mapper.xml34;com.bolingcavalry.druidonesource.mapper&34;UserController&34;用戶服務&34;LogController&34;日誌服務&34;com.bolingcavalry.druidonesource.controller&34;MyBatis CURD操作&34;程式設計師欣宸&34;https://github.com/zq2599/blog_demos&34;zq2599@gmail.com&34;1.0&34;API 描述&34;${spring.datasource.url}&34;${spring.datasource.username}&34;${spring.datasource.password}&34;${spring.datasource.driver-class-name}&34;${spring.datasource.druid.initial-size}&34;${spring.datasource.druid.max-active}&34;${spring.datasource.druid.min-idle}&34;${spring.datasource.druid.max-wait}&34;${spring.datasource.druid.pool-prepared-statements}&34;${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}&34;${spring.datasource.druid.time-between-eviction-runs-millis}&34;${spring.datasource.druid.min-evictable-idle-time-millis}&34;${spring.datasource.druid.max-evictable-idle-time-millis}&34;${spring.datasource.druid.validation-query}&34;${spring.datasource.druid.test-while-idle}&34;${spring.datasource.druid.test-on-borrow}&34;${spring.datasource.druid.test-on-return}&34;${spring.datasource.druid.filters}&34;{spring.datasource.druid.connection-properties}&34;druid configuration initialization filter", e); } datasource.setConnectionProperties(connectionProperties); return datasource; }}

    • 接下來的數據實體類、mapper配置、mapper接口類、業務代碼等,除了package不一樣,其他的與上一章《 》一模一樣,請參考github源碼或者上一篇文章來編寫,這裡就不佔篇幅了;
    • 編碼完成,先來試試單元測試吧;

    單元測試(有坑需要特別注意)

    單元測試時有個問題要特別注意,就是關閉監控功能,否則會導致單元測試失敗;

    • 新建名為application-test.yml的文件,內容和application.yml一樣,僅下圖紅框中的值不同:

    • 單元測試類UserControllerTest的內容與上一章《 》一樣,僅下圖紅框位置是新增的,用於指定使用application-test.yml配置文件:

    驗證,單元測試

    如下圖紅框的操作,即可完成單元測試,如果您的紅框2位置也是全部綠色就代表單元測試通過:

    驗證,swagger

    • 運行DuridOneSourceApplication類啟動應用;
    • 瀏覽器打開:http://localhost:8080/swagger-ui.htm,操作如下:

    • 得到響應操作成功,並返回了主鍵ID:

    • 其他接口也可以通過類似操作在swagger頁面上完成;

    確認使用了druid連接池

    • 上面的操作證明咱們的spring boot應用可以操作資料庫,但沒辦法證明用的是druid數據源(沒準用的還是spring boot的默認datasource),因此需要有種更直接的方式來檢查數據源詳情,因此採用了打斷點的手段,查看數據源實例;
    • UserMapper接口insertWithFields方法的打上斷點,如下圖紅框:

    • 如下圖,在DuridOneSourceApplication類上點擊滑鼠右鍵,選擇紅框中的選項,即可以debug的方式啟動應用:

    • 啟動日誌如下圖紅框,可見debug模式下啟動速度很慢,請耐心等待:

    • 再次調用方法就會進入斷點位置,這時候可以展開UserMapper對應實例的變量,如下圖紅框所示,可以確定使用了druid的連接池:

    • 上一篇文章中的工程curd沒有使用druid,咱們也打上斷點看看數據源啥樣的,如下圖所示,是個HikariDataSource實例:

    體驗druid提供的監控頁面

    • 執行DuridOneSourceApplication類啟動應用;
    • 瀏覽器訪問:http://localhost:8080/druid ,如下圖,帳號密碼都是admin(在application.yml中配置的):

    • 在swagger上調用幾次接口對資料庫進行操作,之後回到druid頁面,如下圖,可見已經監控到了具體的資料庫操作:

    • 至此,springboot+mybatis+druid集成的開發和驗證就完成了,希望本文能給您一些參考;

    歡迎關注我的公眾號:程式設計師欣宸

    相關焦點

    • MyBatis初級實戰之四:druid多數據源
      多數據源本文是《mybatis初級實戰》系列的第四篇,一個springboot應用同時操作兩個資料庫的場景,在平時也會遇到,今天要實戰的就是通過druid配置兩個數據源,讓一個springboot應用同時使用這兩個數據源;
    • MyBatis初級實戰之一:Spring Boot集成
      github.com/zq2599/blog_demos內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;MyBatis初級實戰《MyBatis初級實戰》系列旨在通過一系列編碼實戰,和讀者一起掌握MyBatis的基本用法,幫助初學者快速運用MyBatis參與實際開發;聚焦MyBatis《MyBatis初級實戰》面向的是對MyBatis有興趣的讀者,向讀者們提供可用的方案和代碼,這裡不是比較Hibernate、sqltoy-orm
    • MyBatis初級實戰之五:一對一關聯查詢
      初級實戰》系列的源碼在mybatis文件夾下,如下圖紅框所示:,在名為mybatis的資料庫中建立兩個表(和前面幾篇文章中的表結構一模一樣):user和log表;user表記錄用戶信息,非常簡單,只有三個欄位:
    • MyBatis初級實戰之六:一對多關聯查詢
      https://github.com/zq2599/blog_demos內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;本篇概覽本文是《MyBatis初級實戰
    • SpringBoot+MyBatis+Druid整合demo
      最近自己寫了一個SpringBoot+mybatis(generator)+druid的demo的配置# mybatis實體類的包路徑mybatis.typeAliasesPackage=com.qlu.cloud.pojo# mybatis的dao層方法的實現xmlmybatis.mapper-locations: classpath:mapper/*.xml
    • 單手擼了個springboot mybatis druid
      在這裡解釋一下為什麼是springboot+mybatis+druid,是因為作者認為但凡任何一個有靈魂的項目,都少不了資料庫,作者不喜歡用JPA那種混SQL的語法,因此選了mybatis,而Druid是阿里系(真香~)的一種資料庫連接池框架,在上一個項目作者用的屢試不爽,因此打算繼續用
    • MyBatis初級實戰之二:增刪改查
      本文是《MyBatis初級實戰》系列的第二篇,前文《 》我們知道了如何在SpringBoot中集成MyBatis,本篇就一起來練習基本功:增刪改查;本篇概覽本篇要練習的內容如下:github.com/zq2599/blog_demos):這個git項目中有多個文件夾,《MyBatis初級實戰
    • Spring Boot之 Mybatis Druid 資料庫
      -- MyBatis --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version>
    • SpringBoot集成mybatis-plus
      這篇文章介紹SpringBoot集成Mybatis-Plus,同時介紹使用easyCode通過指定的資料庫表生成對應的bean、mapper.xml、mapper.java、service.java、serviceImpl.java和controller。
    • Spring同時集成JPA與Mybatis
      本文我們重點將介紹同時集成Spring Data JPA和Mybatis兩個ORM框架。Spring ORM 同時集成JPA與Mybatis在同一個項目中一般只會單獨集成Spring Data JPA,或者單獨集成Mybatis。但兩者也可以混合使用(一般沒這個必要),本文為了更加深入探索Spring ,將通過一個DEMO應用兩者的並展示相似點與不同之處。
    • SpringBoot+Mybatis+druid 多數據源配置
      mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version
    • 集成Redis、mybatis、springboot
      寫配置spring: #redis 的配置 redis: host: localhost port: 6379 database: 0# 數據源,我用了druiddatasource: type: com.alibaba.druid.pool.DruidDataSource password: 12345678 username: root url: jdbc:mysql://localhost:3306/redis?
    • mybatis最全教程之springboot集成mybatis
      經過前面的教程,相信您對mybatis有了比較深刻的認識和了解,我們看看在實際生產中怎麼使用mybatis來提高工作效率。那麼首先我們要做的就是與spring進行集成。本節課使用springboot與mybatis進行集成。
    • 基礎:Springboot集成Druid
      Spring Boot 2.0以上默認使用Hikari數據源,可以說Hikari與Druid都是當前java web上最優秀的數據源springboot如何集成Druid數據源,如何實現資料庫監控?Github地址:https://github.com/alibaba/druid/2.配置數據源1.添加Druid數據源依賴<!
    • 武漢課工場Pyhton培訓:SpringBoot集成Mybatis這一篇就夠了
      雖然不是親生的,但是Mybatis憑藉自己輕巧靈活的身姿(易上手、動態SQL等),贏得了廣大開發者的喜愛,大有奪嫡的之勢。 所以這篇文章咱麼就來聊聊SpringBoot整合MyBatis的技術細節。 建表創建好資料庫之後,我們就要創建資料庫表,表名叫t_user,這張用戶表有三個屬性,分別是: id 唯一標記 username 用戶名稱 age 年齡 並插入三條數據: 插入數據INSERT INTO
    • 通關 MyBatis 實戰,上篇
      各位志同道合的朋友們大家好,我是一個一直在一線網際網路踩坑十餘年的編碼愛好者,現在將我們的各種經驗以及架構實戰分享出來,如果大家喜歡,就關注我,一起將技術學深學透,我會每一篇分享結束都會預告下一專題是 MyBatis 官方幫助我們快速集成 Spring Boot 提供的一個組件包,mybatis-spring-boot-starter 2.1.0 對應 MyBatis 的版本是 3.5.2。
    • SpringBoot集成Mybatis
      --mybatis集成SpringBoot框架起步依賴--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId
    • Sharding-jdbc的實戰入門之水平分表(一)
      持久化mybatis我們引用的是mybatis-plus定義實體類b、企業級SpringBoot應用多個子項目配置文件規劃、多環境支持(一)c、企業級SpringBoot應用多個子項目配置文件規劃、多環境支持(二)d、企業級SpringBoot應用多個子項目配置文件之配置中心(三)e、利用阿里開源工具進行排查線上CPU居高問題f、阿里二面:如何快速排查死鎖?如何避免死鎖?
    • SpringBoot+Mybatis+ Druid+PageHelper 實現多數據源並分頁
      同時Druid不僅僅是一個資料庫連接池,Druid 核心主要包括三部分:基於Filter-Chain模式的插件體系。DruidDataSource 高效可管理的資料庫連接池。SQLParserDruid的主要功能如下:是一個高效、功能強大、可擴展性好的資料庫連接池。
    • 詳解mybatis和Mybatis-Plus區別
      Mybatis雖然已經給我們提供了很大的方便,但它還是有不足之處,實際上沒有什麼東西是完美的,MP的存在就是為了稍稍彌補Mybatis的不足。另外,MP的代碼生成器也是一個很有意思的東西,它可以讓我們避免許多重複性的工作,下面我將介紹如何在你的項目中集成MP。.....