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就是这些封装的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xlecho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值