前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >号称全网最快的数据库连接池HikariCP的工具类开发-HikariCPUtils

号称全网最快的数据库连接池HikariCP的工具类开发-HikariCPUtils

作者头像
杨校
发布2019-06-16 13:08:18
3K0
发布2019-06-16 13:08:18
举报
文章被收录于专栏:Java技术分享圈Java技术分享圈

 Hikari 来自日文,是“光”的意思。作者估计是为了借助这个词来暗示这个CP速度飞快! 这个产品的口号是“快速、简单、可靠”。 不再过多介绍了,有兴趣的朋友可以访问:https://github.com/brettwooldridge/HikariCP/wiki

目录

1.编写工具类

2.编写配置文件:hikaricp.properties

3.编写SQl数据:

4.编写实体类:

5.编写测试类:TestDataByHikaricp


1.编写工具类

代码语言:javascript
复制
package cn.javabs.school.util;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Hikaricp数据库连接池工具类的设计
 * @author Mryang 
 */
public class HikaricpUtils {

    // 定义HikariDataSource类型的dataSource 
        // 注意: 因为HikariDataSource类 实现了DataSource 接口。 因此 dataSource 即是HikariDataSource类型也是DataSource类型
    public  static HikariDataSource dataSource;

    /**
     * 获取数据源
     * @return
     * @throws SQLException
     * @throws IOException
     */
    public static DataSource getDataSource()  {

        try {
            // 因为dataSource是全局变量、默认初始化值为null 
            if (dataSource == null){
                // 通过字节输入流 读取 配置文件  hikaricp.properties
                InputStream is = HikaricpUtils.class.getClassLoader().getResourceAsStream("hikaricp.properties");
                // 因为HikariConfig类不可以加载io,但是可以加载Properties。因此:将输入流is封装到props
                Properties props = new Properties();
                props.load(is);
                // 再将封装好的props 传入到HikariConfig 类中,得到 config对象
                HikariConfig config = new HikariConfig(props);
                // 将config对象传入给HikariDataSource ,返回dataSource
                dataSource = new HikariDataSource(config);
            }
            // 返回dataSource
            return  dataSource;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

    /**
     * 通过数据源获取连接
     * @return
     * @throws SQLException
     */
    public static  Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

2.编写配置文件:hikaricp.properties

配置文件密码为:hikaricp.properties

代码语言:javascript
复制
# 数据库驱动|不填写HikariCp会自动识别
driverClassName=com.mysql.jdbc.Driver
# 访问数据库连接
jdbcUrl=jdbc:mysql://localhost:3306/hikaricp-data
# 数据库用户名
username=root
# 数据库密码
password=sorry
# 最大连接数
maximumPoolSize=30
# 连接池空闲连接的最小数量
minimumIdle=5
# 开启事务自动提交
autoCommit=true
# 是否自定义配置,为true时下面两个参数才生效
dataSource.cachePrepStmts=true
# 连接池大小默认25,官方推荐250-500
dataSource.prepStmtCacheSize=250
# 单条语句最大长度默认256,官方推荐2048
dataSource.prepStmtCacheSqlLimit=2048

3.编写SQl数据:

代码语言:javascript
复制
create database hikaricp-data;
use hikaricp-data;
create table user(
    id int primary key auto_increment,
    username varchar(50) not null unique,
    password varchar(50) not null
);
insert into user(id,username,password) values('1001','wangcai','wangcai123');
insert into user(id,username,password) values('1002','xiaoqiang','xiaoqiang123');
insert into user(id,username,password) values('1003','0927','0927');
insert into user(id,username,password) values('1004','baihu','baihu');
insert into user(id,username,password) values('1005','xingxing','xingxing');

4.编写实体类:

代码语言:javascript
复制
public class User {
    private Integer id;
    private  String username;
    private  String password;

     public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                
                '}';
    }
        
}

5.编写测试类:TestDataByHikaricp

代码语言:javascript
复制
package cn.javabs.school.test;

import cn.javabs.school.entity.User;
import cn.javabs.school.util.HikaricpUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.junit.Test;

import java.io.IOException;
import java.sql.SQLException;

public class TestDataByHikaricp {

    @Test
    public void  testHikariCp() throws SQLException, IOException {
        User user = new User();
        QueryRunner qr =  new QueryRunner(HikaricpUtils.getDataSource());
        User u = qr.query("select * from user where id=1005", new BeanHandler<User>(User.class));
        System.out.println(u);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.编写工具类
  • 2.编写配置文件:hikaricp.properties
  • 3.编写SQl数据:
  • 4.编写实体类:
  • 5.编写测试类:TestDataByHikaricp
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档