Hutool - Db
基础学习:
— 官方文档
— 个人整理文档
源代码:
– Wset - Gitee.com
– codechina.csdn
– CSDN
目录结构说明
请转至目录结构说明
搭建环境
本文以功能实现 —— 数据库管理(Hutool-db - 简单使用增删改查)为基础进行代码更改,添加druid作为数据池,添加sqlserver作为测试多源数据库
测试api工具:postman
数据库和api测试工具可自行选择
1. 引入依赖
<!-- 引入druid依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!-- 引入sqlserver依赖 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.2.1.jre8</version>
</dependency>
2. mssql数据库创建suser和sarticle测试表
USE [testmssql]
GO
/****** Object: Table [dbo].[suser] Script Date: 2021/6/29 16:53:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[suser](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nchar](10) NULL,
[sex] [nchar](10) NULL,
CONSTRAINT [PK_suser] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [testmssql]
GO
/****** Object: Table [dbo].[sarticle] Script Date: 2021/6/29 16:53:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[sarticle](
[id] [int] IDENTITY(1,1) NOT NULL,
[title] [nchar](10) NULL,
[authId] [int] NULL,
[description] [nchar](10) NULL,
CONSTRAINT [PK_sarticle] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[sarticle] WITH CHECK ADD CONSTRAINT [FK_sarticle_suser] FOREIGN KEY([authId])
REFERENCES [dbo].[suser] ([id])
GO
ALTER TABLE [dbo].[sarticle] CHECK CONSTRAINT [FK_sarticle_suser]
GO
3. 设置db.setting
多源配置文件实现方法
- 按照自定义配置文件的方式读取多个配置文件
- 在同一配置文件中使用分组隔离不同的数据源配置
本文使用方案二,且只对mssql进行分组,这样做可以把mariadb作为默认数据库
## 基本配置信息
# JDBC URL,根据不同的数据库,使用相应的JDBC连接字符串
url = jdbc:mariadb://192.168.205.131:3306/test
# 用户名,此处也可以使用 user 代替
username = root
# 密码,此处也可以使用 pass 代替
password = root
## 可选配置
# 是否在日志中显示执行的SQL
showSql = true
# 是否格式化显示的SQL
formatSql = false
# 是否显示SQL参数
showParams = true
# 打印SQL的日志等级,默认debug
sqlLevel = debug
[mssql]
# JDBC URL,根据不同的数据库,使用相应的JDBC连接字符串
url = jdbc:sqlserver://192.168.205.131:1433;DatabaseName=testmssql
# 用户名,此处也可以使用 user 代替
username = sa
# 密码,此处也可以使用 pass 代替
password = 123@Root
## 可选配置
# 是否在日志中显示执行的SQL
showSql = true
# 是否格式化显示的SQL
formatSql = false
# 是否显示SQL参数
showParams = true
# 打印SQL的日志等级,默认debug
sqlLevel = debug
#----------------------------------------------------------------------------------------------------------------
## 连接池配置项
# 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize = 0
# 最大连接池数量
maxActive = 8
# 最小连接池数量
minIdle = 0
# 获取连接时最大等待时间,单位毫秒。配置了maxWait之后, 缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait = 0
# 是否缓存preparedStatement,也就是PSCache。 PSCache对支持游标的数据库性能提升巨大,比如说oracle。 在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。作者在5.5版本中使用PSCache,通过监控界面发现PSCache有缓存命中率记录, 该应该是支持PSCache。
poolPreparedStatements = false
# 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true。 在Druid中,不会存在Oracle下PSCache占用内存过多的问题, 可以把这个数值配置大一些,比如说100
maxOpenPreparedStatements = -1
# 用来检测连接是否有效的sql,要求是一个查询语句。 如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。
validationQuery = SELECT 1
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnBorrow = true
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn = false
# 建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testWhileIdle = false
# 有两个含义: 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
timeBetweenEvictionRunsMillis = 60000
# 物理连接初始化的时候执行的sql
connectionInitSqls = SELECT 1
# 属性类型是字符串,通过别名的方式配置扩展插件, 常用的插件有: 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
filters = stat
# 类型是List<com.alibaba.druid.filter.Filter>, 如果同时配置了filters和proxyFilters, 是组合关系,并非替换关系
proxyFilters =
简单测试连通
package com.west.server.test;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.db.ds.DSFactory;
public class dbTest {
public static void main(String[] args) throws SQLException {
// List<Entity> list = Db.use().findAll("user");
// System.out.print(list);
// 默认为mariadb
DataSource ds = DSFactory.get();
System.out.println("mariadb ================= "+Db.use(ds).findAll("use