功能实现 —— 数据库管理(Hutool-db-DSFactory-数据池及多源配置)

这篇博客介绍了如何在Java项目中使用Hutool结合Druid实现数据库管理,包括多源配置和数据池功能。通过引入依赖、设置数据库配置、修改Service和Controller层,实现了针对MSSQL的测试多源数据库连接,并提供了Postman测试API的指导。
摘要由CSDN通过智能技术生成

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

多源配置文件实现方法

  1. 按照自定义配置文件的方式读取多个配置文件
  2. 在同一配置文件中使用分组隔离不同的数据源配置

本文使用方案二,且只对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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值