Mybatis教程-使用Hikari和QueryRunner簡化JDBC鏈接操作

Mybatis教程-簡化JDBC鏈接操作


當我們發現使用JDBC有着很多冗餘的代碼的時候,我們可以自己封裝一些代碼,完成這些重複的操作。當然市面上其實也有很多這樣的封裝,這也是Mybatis發展歷史中的重要一個環節。所有的框架都是基於不斷的封裝,我們當前的封裝就是向框架更進一步

使用封裝類QueryRunner和HikariDatasource

使用之前我們需要引入對應的工具類的依賴

<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>3.2.0</version>
</dependency>

我們這裏引入了連接池,那麼我們需要對連接池進行一些配置,配置如下

dataSource.user=admin
dataSource.password=123456
jdbcUrl=jdbc:mysql://192.168.229.132:3306/blog?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC

dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
dataSource.minimumIdle=10
dataSource.maximumPoolSize=30
  • 完成這些操作之後我們就可以用工具類來簡化在使用JDBC發現的冗餘的代碼。
package com.example.demo;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.*;

/**
 * @author echo
 * @date 2020/6/19 20:30
 **/
public class HikariUtil {

    private static final String PROPERTY_PAHT = "/hikari.properties";
    private static QueryRunner queryRunner;
    private static HikariDataSource dataSource;

    public static void init() {
        HikariConfig config = new HikariConfig(PROPERTY_PAHT);
        dataSource = new HikariDataSource(config);
        // 使用數據源初始化QueryRunner
        queryRunner = new QueryRunner(dataSource);
    }

    public static QueryRunner getQueryRunner() {
        check();
        return queryRunner;
    }

    public static Connection getConnection() {
        check();
        try {
            Connection connection = dataSource.getConnection();
            return connection;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public static void close(Connection connection) {
        try {
            if (connection != null && !connection.isClosed()) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    private static void check() {
        if (dataSource == null || queryRunner == null) {
            throw new RuntimeException("DataSource has not been init");
        }
    }

}

從代碼中可以看到我,我們初始化了連接池,並且對返回值的處理做了統一的封裝

  • 完成這些操作之後,我們就可以直接使用這個類來鏈接數據庫了,並且不需要再像JDBC鏈接的時候,有多少個類就需要多少個鏈接,同時不斷的重複開關鏈接資源,並且對返回值做了處理,我們可以通過以下例子來使用該工具類,瞭解他的用途。
package com.example.demo;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author echo
 * @date 2020/6/21 9:46
 **/
public class TestHikari {

    private static QueryRunner queryRunner;

    static {
        HikariUtil.init();
        queryRunner = HikariUtil.getQueryRunner();
    }

    public static void main(String[] args) throws SQLException {
        String sql = "select * from `user` where id = '1'";
        User query = queryRunner.query(sql, new BeanHandler<>(User.class));
        System.out.println(query);
        Connection connection = HikariUtil.getConnection();
        HikariUtil.close(connection);
    }
}

我們執行之後,我們就可以直接看到以下結果。證明我們使用工具類完成了一個簡單的查詢動作。但是同時我們發現這裏的返回值和JDBC鏈接測試的返回值不一致,不同的地方在於createTime和updateTime的值。引起的原因很簡單,這是由於封裝類QueryRunner封裝返回值的時候,數據庫的字段必須和實體類一致。
在這裏插入圖片描述

到這裏爲止,其實我們可以看到我們可以更簡單的,使用更少的代碼完成與數據庫的交互。在Mybatis中,我們使用了大量的業務代碼,但是其實這些都是封裝在了底層,當我們不斷的瞭解的時候,我們會發現Mybatis就是這些封裝的集合

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