SpringBoot集合MyBatis連接PostgreSQL
正好最近需要使用PostgreSQL,蹭着這個機會把MyBatis練習一下。下面就直接開始。
本次也順帶把配置文件修改爲yml文件,方便後面的修改和配置。改文件很簡單,只需要修改配置文件後綴名爲yml即可。Spring可以直接識別,不需要修改其他的配置文件內容。將application.properties
修改爲application.yml
。同時需要注意兩個文件的格式是不一樣的。需要注意的就是:
後面有一個空格。
#################################### common config : ####################################
server:
port: 8080
spring:
application:
name: train
#Redis依賴
# Redis服務器地址
redis:
host: 127.0.0.1
# Redis數據庫索引(默認爲0)
database: 0
# Redis服務器連接端口
port: 6379
# Redis服務器連接密碼(默認爲空)
password: mima
# 連接超時時間(毫秒)
timeout: 1000
lettuce:
pool:
## 連接池最大連接數(使用負值表示沒有限制)
max-active: 200
## 連接池最大阻塞等待時間(使用負值表示沒有限制)
max-wait: -1
## 連接池中的最大空閒連接
max-idle: 10
## 連接池中的最小空閒連接
min-idle: 0
datasource:
#PostgreSQL配置
url: jdbc:postgresql://127.0.0.1:5432/postgres
username: postgres
password: mima
driver-class-name: org.postgresql.Driver
#druid連接池配置
type: com.alibaba.druid.pool.DruidDataSource
# 初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時
initialSize: 5
minIdle: 5
# 最大連接池數量
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis:
# 加載配置文件
mapper-locations: classpath:mapper/*.xml
# 實體類所在路徑,填寫改路徑mapper文件中可以不寫全路徑
type-aliases-package: com.psq.train.mysql
另外,這次也使用了連接池Druid,這個是阿里開發的一個工具,挺好用(大家都這樣說)。這次也順帶整合進去。下面就一步一步來吧。
首先整合PostgreSQL,添加PostgreSQL依賴即可。如下:
<!-- postgresql依賴 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
順帶添加Mybatis和Druid的依賴。
<!-- druid連接池依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<!-- MyBatis依賴 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
要記得刪除之前使用的MySQL的依賴,因爲我之前的項目使用了MySQL,所以刪除了MySQL和JDBC的依賴。另外這裏也遇到一個坑。不知道IDE抽什麼風,項目啓動的時候一直報錯,顯示Redis和Mybatis沒有配置,但是我依賴都已經刪除了。我找了三個小時,最後才發現項目的庫不對,仍然存在已經刪除的jar包。所以再刪除依賴後更新pom文件後,需要查看下面兩個地方是不是正常。如下圖:
更新完畢依賴後,下面就可以編寫配置文件了。配置文件如上面所示,PostgreSQL需要注意url
和driver-class-name
。從type
往下都是Druid的配置。Mybatis也是最下面的配置。
Druid的配置詳細解讀這個鏈接比較詳細。https://www.cnblogs.com/lzhya/p/12493974.html
同時,因爲spring中的Druid配置文件不能讀取,所以要寫一個配置類,讓參數正常加載。代碼如下:
package com.psq.train.dao;
import com.psq.train.mysql.TestUser;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* UserMapper.java
* Description: user表的mapper映射
*
* @author Peng Shiquan
* @date 2020/6/12
*/
public interface UserMapper {
/**
* Description: 查詢所有用戶信息
*
* @param
* @return java.util.List<com.psq.train.mysql.TestUser>
* @Author: Peng Shiquan
* @Date: 2020/6/12
*/
List<TestUser> getAllUser();
}
Mybatis的配置這裏不是很瞭解,不再解釋,後面慢慢補上。
爲了讓dao層的mapper映射文件能夠注入,啓動類添加了下面的註解。
package com.psq.train;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Description: SpringBoot啓動類
*
* @param null
* @return
* @Author: Peng Shiquan
* @Date: 2020/5/28
*/
@SpringBootApplication
@MapperScan("com.psq.train.dao")
public class TrainApplication {
public static void main(String[] args) {
SpringApplication.run(TrainApplication.class, args);
}
}
項目結構圖如下:
下面就是具體的業務代碼實現,上面都是基礎的配置。
-
首先需要先創建表,這裏不再敘述,後面需要補充,我就是簡單的創建了一個user表,和MySQL的類似。
-
再就是創建mapper文件,相當於把數據庫中的表和java代碼聯繫起來。代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.psq.train.dao.UserMapper"> <select id="getAllUser" resultType="TestUser"> SELECT id,name,password FROM test_user </select> </mapper>
-
創建一個mapper類,方法名要和mapper文件中的id保持一致。代碼如下:
package com.psq.train.dao; import com.psq.train.mysql.TestUser; import java.util.List; /** * UserMapper.java * Description: user表的mapper映射 * * @author Peng Shiquan * @date 2020/6/12 */ public interface UserMapper { /** * Description: 查詢所有用戶信息 * * @param * @return java.util.List<com.psq.train.mysql.TestUser> * @Author: Peng Shiquan * @Date: 2020/6/12 */ List<TestUser> getAllUser(); }
-
創建測試類,調用一下mapper類查詢一下數據,這裏最簡單就可以了,所以沒有按照web開發的模版寫。
package com.psq.train.postgresql; import com.psq.train.dao.UserMapper; import com.psq.train.mysql.TestUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.List; /** * PostgreSQLTest.javaa * Description: PostgreSQL的測試demo * * @author Peng Shiquan * @date 2020/6/12 */ @Component public class PostgreSQLTest { @Autowired private UserMapper userMapper; /** * Description: PostgreSQL的測試方法 * * @param * @return void * @Author: Peng Shiquan * @Date: 2020/6/12 */ @PostConstruct public void selectAllUser() { List<TestUser> testUserList = userMapper.getAllUser(); for (TestUser testUser : testUserList) { System.err.println(testUser.toString()); } } }
這裏有一個地方需要注意,編寫Drudi配置類的時候,發現無法啓動,報錯信息是注入了相同name的bean,最後排查到是Druid配置類名字和其中一個方法名字相同,導致無法注入。後面查詢到這倆註解的作用如下:
-
@Configuration
-
@Configuration註解底層是含有@Component ,所以@Configuration 具有和 @Component 的作用。
-
@Configuration註解相當於spring的xml配置文件中標籤,裏面可以配置bean。
-
-
@Bean
-
@Bean註解相當於spring的xml配置文件標籤,告訴容器注入一個bean。
-
@Bean註解的方法上如果沒通過bean指定實例名,默認實例名與方法名相同。
-
@Bean註解默認爲單例模式,可以通過@Scope(“prototype”)設置爲多例。
-
關於PostgreSQL數據庫的其他信息,下面一篇博客再說吧,要不然博客就太多了。
就這樣吧,結束。