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

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

目录

1.编写工具类

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

3.编写SQl数据:

4.编写实体类:

5.编写测试类:TestDataByHikaricp


1.编写工具类

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

# 数据库驱动|不填写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数据:

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.编写实体类:

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

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);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券