SpringBoot集合MyBatis連接PostgreSQL(SpringBoot學習四)

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文件後,需要查看下面兩個地方是不是正常。如下圖:

image-20200612161516325

image-20200612161543564

​ 更新完畢依賴後,下面就可以編寫配置文件了。配置文件如上面所示,PostgreSQL需要注意urldriver-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);
    }
}

​ 項目結構圖如下:

image-20200612163659714

​ 下面就是具體的業務代碼實現,上面都是基礎的配置。

  • 首先需要先創建表,這裏不再敘述,後面需要補充,我就是簡單的創建了一個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數據庫的其他信息,下面一篇博客再說吧,要不然博客就太多了。

​ 就這樣吧,結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章