SpringBoot整合MyBatis與MySql8.0
一、前言
之前已經有一篇文章討論過SpringBoot整合MyBatis,因而此篇不在重複累贅,本文主要是最新版的SpringBoot2.0與MyBatis、最新MySQL8.0整合過程中遇到的問題進行總結。同時,SpringBoot整合MyBatis中可以不用之前那篇那樣繁瑣的配置,可以使用application.properties檔案進行整合。
二、application.yml 與 application.properties 載入順序
SpringBoot優先載入yml檔案,也就是先載入yml檔案再載入properties檔案。兩個檔案都可以起到同時配置全域性的作用。如果在yml檔案中配置了埠為80,在properties檔案中配置了8080,那麼最後埠是8080,因而properties後加載,覆蓋了之前已經配置後的80埠。
三、application.properties示例
#設定Tomcat埠,預設8080 server.port=8080 #設定專案ContextPath server.context-path=/ #設定Tomcat編碼 server.tomcat.uri-encoding=UTF-8 #設定檢視解析器路徑 spring.mvc.view.prefix=/WEB-INF/views/ #設定檢視解析器字尾 spring.mvc.view.suffix=.jsp #資料庫配置 spring.datasource.url=jdbc:mysql://localhost:3306/tuzisong?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=F6m3G3j6 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #配置.xml檔案路徑 mybatis.mapper-locations=classpath:mapper/*.xml #配置模型路徑 mybatis.type-aliases-package=cn.copy.model
MyBatis通過上述兩行,便可在Resource的mapper中讀取xml檔案和對應的實體類,如果資料庫使用的MySQL8.0,載入類需要更改,下文有論述。
如果想了解整體的配置,檔案目錄結構,詳細可以參考該示例的原文:[1]
四、使用MySQL8.0
使用MySQL8.0的時候會出現相容性的問題。
1、資料庫連線工具無法連線[2]
mysql8.0預設採用caching_sha2_password的加密方式
第三方客戶端基本都不支援這種加密方式,只有自帶的命令列支援
所以需要修改加密方式。在MySQL自帶的客戶端client中輸入如下命令:
ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password'; 示例: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
2、SpringBoot通過jdbc無法連線到MySQL
先更換最新的jar包(當前最新為2018-09-27,8.0.13),在maven中新增如下依賴:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
同時,application.xml中配置檔案中應該改為:
url: jdbc:mysql://localhost:3306/db_test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
driver: com.mysql.cj.jdbc.Driver
詳細內容可以參考文章[3]
五、後言
本文需要對SpringBoot與MyBatis有一定的瞭解,時代在向前,版本在更新,在重新整合的過程中遇到的各種問題,集合各方的觀點與解決方案,總結形成此文。