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

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

Hikari 来自日文,是“光”的意思。作者估计是为了借助这个词来暗示这个CP速度飞快!

这个产品的口号是“快速、简单、可靠”。

不再过多介绍了,有兴趣的朋友可以访问:https://github.com/brettwooldridge/HikariCP/wiki

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


20190529004544846.gif

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

目录
相关文章
|
2月前
|
存储 前端开发 关系型数据库
秀啊,用Python快速开发在线数据库更新修改工具
秀啊,用Python快速开发在线数据库更新修改工具
|
2月前
|
前端开发 数据库 虚拟化
太6了!用Python快速开发数据库入库系统
太6了!用Python快速开发数据库入库系统
|
2月前
|
前端开发 数据库 Python
用Python轻松开发数据库取数下载工具
用Python轻松开发数据库取数下载工具
|
2月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
33 0
|
2月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
29 0
|
2月前
|
数据库 测试技术 开发者
Play Framework的测试魔法:让代码在舞台上翩翩起舞,确保应用质量的幕后英雄!
【8月更文挑战第31天】Play Framework不仅以其高效开发与部署流程著称,还内置了强大的测试工具,提供全面的测试支持,确保应用高质量和稳定性。本文将详细介绍如何在Play Framework中进行单元测试和集成测试,涵盖`WithApplication`、`WithServer`及`WithDatabase`等类的使用方法,并通过示例代码手把手教你如何利用Play的测试框架。无论是单元测试、集成测试还是数据库操作测试,Play Framework均能轻松应对,助你提升应用质量和开发效率。
27 0
|
2月前
|
SQL 关系型数据库 数据库连接
Entity Framework Core 入门教程来袭!快速上手强大的 ORM 工具,开启高效数据库开发之旅!
【8月更文挑战第31天】Entity Framework Core(EF Core)是一个轻量且可扩展的对象关系映射(ORM)框架,允许开发者使用 .NET 语言操作数据库而无需直接编写 SQL 语句。本教程涵盖 EF Core 的安装、数据库上下文创建、数据库连接配置及常见数据库操作(如添加、查询、更新和删除),并介绍如何利用数据库迁移功能安全地更改数据库结构。通过本教程,你可以快速掌握 EF Core 的基本用法,提高开发效率。
37 0
|
2月前
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
28 0
|
2月前
|
存储 缓存 数据库连接
Entity Framework Core 跨数据库查询超厉害!多数据库连接最佳实践,让你的开发更高效!
【8月更文挑战第31天】在现代软件开发中,跨数据库查询是常见需求。Entity Framework Core(EF Core)作为强大的ORM框架,支持多种方法实现这一功能。本文介绍了在EF Core中进行跨数据库查询的最佳实践,包括:理解数据库上下文、使用多个上下文进行查询、处理数据库连接与事务,以及性能优化策略。通过创建独立的数据库上下文如`UserContext`和`OrderContext`,并在业务逻辑中同时使用它们,可以轻松实现跨库查询。此外,利用`TransactionScope`可确保事务一致性,从而提高系统的可靠性和效率。
65 0
|
2月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
130 0
下一篇
无影云桌面