SpringBoot2.0學習筆記:(九) Spring Boot中整合Mybatis與Druid
一、專案的搭建
Druid對Spring boot做了很好的適配,所有的工作都只需要在配置檔案中完成。
具體的Druid在Spring Boot中的配置可以看:GitHub文件
首先看一下專案引入的jar包:
<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>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
< artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version >
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
在Spring Boot專案使用Druid需要匯入的jar包是druid-spring-boot-starter
。
很簡單,專案只需要匯入
mybatis-spring-boot-starter
、
mysql-connector-java
、
druid-spring-boot-starter
spring-boot-starter-web
這四個jar包就可以了。
之後看一下專案目錄結構:
我使用的是yml格式的配置檔案,因為配置太多了,這樣寫簡單一點=-=。
controller、model、dao、這三個包內的Java檔案勿用多說,說一下resoucres目錄下的mybatis資料夾,這是我定義的Mybatis的對映檔案所處的位置,這個路徑需要在配置檔案中配置一下。
mybatis:
mapper-locations: classpath:mybatis/*.xml
現在具體看一下application.yml檔案:
spring:
datasource:
druid:
# JDBC配置
url: jdbc:mysql://localhost:3306/world?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# 連線池配置
# 配置初始化大小、最小、最大
initial-size: 5
max-active: 20
min-idle: 5
# 獲取連線等待超時時間
max-wait: 60000
pool-prepared-statements: true
#
validation-query: SELECT 1
test-on-borrow: false
test-on-return: false
test-while-idle: true
# 間隔多久進行一次檢測,檢測需要關閉的空閒連線
time-between-eviction-runs-millis: 60000
# 一個連線在連線池中最小的生存時間
min-evictable-idle-time-millis: 300000
max-pool-prepared-statement-per-connection-size: 20
# 合併多個DruidDataSource的監控資料
use-global-data-source-stat: true
filters: stat
filter:
# 慢SQL記錄(sql語句執行時間超過某個界限就記錄下來)
stat:
slow-sql-millis: 200
log-slow-sql: true
# 監控配置
# Druid WebStatFilter配置
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: /druid/*,*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico
# Druid StatViewServlet配置
stat-view-servlet:
enabled: true
url-pattern: /druid/*
# 登入監控介面的使用者名稱以及密碼,登入url為localhost:8080/druid
login-username: admin
login-password: admin
allow:
deny:
mybatis:
# 指定mybatis對映檔案的位置
mapper-locations: classpath:mybatis/*.xml
configuration:
# 開啟駝峰命名轉換
map-underscore-to-camel-case: true
這就是全部的配置了,其中有關於Druid的配置可以參照上面給出的超連結去GitHub上詳細瞭解。
最後還不能忘了的是,在啟動檔案SpringBootDruidApplication中加入@MapperScan註解,指定要掃描的Mapper類的路徑。
@MapperScan(value = "com.baiding.springboot.dao")
@SpringBootApplication
public class SpringBootDruidApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDruidApplication.class, args);
}
}
以上就是SpringBoot2.0.x中關於Mybatis與Druid的全部配置了,當然這只是很簡陋的配置,具體的擴充套件可以參看官方文件。下面看一下效果:
這裡的Druid監控介面訪問:localhost:8080/druid
就可以
下面是Druid的SQL監控:
下面是Druid的URI監控:
問題解惑
1. Mybatis查出了資料,但無法完成賦值
比如,你在資料庫中查出了一條資料賦值給物件,物件的id成功賦值了,但是他的userName是個空值。這裡就是駝峰命名 的坑了,當你在Mybatis對映檔案中select語句直接使用resultType而不是用resultMap返回資料,並且物件中採用駝峰命名(userName)資料庫中使用user_name時,就會出現這個 情況:
<select id="getUser" parameterType="long" resultType="com.baiding.springboot.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
所以解決辦法就是在配置檔案中開啟駝峰命名:
mybatis:
configuration:
map-underscore-to-camel-case: true
2. Druid連線Mysql資料庫一直提示密碼錯誤
我的mysql資料庫的密碼一開始是一串純數字,例如:033453,但是啟動專案的時候一直報密碼錯誤,之後我跟蹤了一下配置檔案中資料庫連線屬性的賦值過程,跟蹤到DruidAbstractDataSource
的setPassword
方法,
public void setPassword(String password) {
if (StringUtils.equals(this.password, password)) {
return;
}
if (inited) {
LOG.info("password changed");
}
this.password = password;
}
發現在這裡得到的password已經變成了另外一串數字了。很疑惑,但不明白具體原因,希望有大手子可以告知。
之後,我改成了連線虛擬機器上另外的 一個數據庫,密碼也改為了字串,這樣啟動就沒問題了。