Java实战:hutool-db实现多数据源配置

news2024/9/20 18:39:09

❤️作者主页:IT技术分享社区

❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。

❤️个人荣誉: 数据库领域优质创作者🏆,华为云享专家🏆,阿里云专家博主🏆 

❤️个人博客:IT技术分享社区

❤️公众号/小程序:IT技术分享社区 (运营五年)

❤️好文章点赞 👍 收藏 ⭐再看,养成习惯

目录

1、hutool-db介绍

2、新建一个Maven项目

2.1 导入依赖包

2.2 新建db.setting配置文件

2.3 新建测试demo

我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。

今天给大家分享使用Hutool-db实现多数据源配置,大家一起来学习一下吧!

1、hutool-db介绍

Hutool-db是一个在JDBC基础上封装的数据库操作工具类,通过包装,使用ActiveRecord思想操作数据库。在Hutool-db中,使用Entity(本质上是个Map)代替Bean来使数据库操作更加灵活,同时提供Bean和Entity的转换提供传统ORM的兼容支持。

  1. 数据源 DataSource
  2. SQL执行器 SqlExecutor
  3. CRUD的封装 DbSqlConnRunner SqlRunner
  4. 支持事务的CRUD封装 Session
  5. 各种结果集处理类 handler
  6. 数据库的一些工具方法汇总 DbUtil

2、新建一个Maven项目

2.1 导入依赖包

   <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-db</artifactId>
            <version>5.7.22</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.9</version>
        </dependency>

2.2 新建db.setting配置文件

src/main/resources/config/db.setting

[mysql]
url = jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username = root
password = 123456
driver = com.mysql.jdbc.Driver
[sqlserver]
url = jdbc:sqlserver://192.168.33.4:1433;DatabaseName=DB
username = sa
password = 123456
driver = com.microsoft.sqlserver.jdbc.SQLServerDriver

2.3 新建测试demo

/**
     * 测试mysql
     */
    private static void testMysql() {
        DataSource ds = DSFactory.get("mysql");
        Db.use(ds);
        Connection conn = null;
        try {
            conn = ds.getConnection();
            // 插入语句
            SqlExecutor.execute(conn, "insert into t_user (name,age) value ('小张',35)");
            // 更新语句
            SqlExecutor.execute(conn, "update t_user set name='小明002' where id=2 ");
            // 删除语句
            SqlExecutor.execute(conn, "delete from t_user  where id=2 ");
            List<Entity> entityList = SqlExecutor.query(conn, "select * from t_user limit 50", new EntityListHandler());
            for (Entity entity : entityList) {
                System.out.println(entity.get("name"));
            }
        } catch (SQLException e) {

        } finally {
            DbUtil.close(conn);
        }
    }

    /**
     * 测试sqlserver
     */
    private static void testSqlServer() {
        DataSource ds = DSFactory.get("sqlserver");
        Connection conn = null;
        try {
            conn = ds.getConnection();
            List<Entity> entityList = SqlExecutor.query(conn, "select * from t_user", new EntityListHandler());
            for (Entity entity : entityList) {
                System.out.println(entity.get("username"));
            }
        } catch (SQLException e) {

        } finally {
            DbUtil.close(conn);
        }
    }

    /**
     * 直接代码写jdbc数据源 不推荐的方式
     */
    private static void testDefineJdbc() {
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT");
        ds.setUsername("root");
        ds.setPassword("12345678");
        Connection conn = null;
        try {
            conn = ds.getConnection();
            List<Entity> entityList = SqlExecutor.query(conn, "select * from t_user", new EntityListHandler());
            for (Entity entity : entityList) {
                System.out.println(entity.get("name"));
            }
        } catch (SQLException e) {

        } finally {
            DbUtil.close(conn);
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G NR同频多beam检测方法

【摘 要】5G NR与LTE有诸多方面的不同,较突出的变化就是SSB内PSS序列和SSS序列设计与LTE明显不同,而且在每个SSB突发内会有多个SSB,多个SSB的出现增加了小区搜索的难度。由于频谱资源匮乏,所以采用同频方式组网,但因此相邻小区之间也会产生干扰,影响检测效率。同频检测技…

器乐文化网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1.用户模块 1)登录/注册 (通过前后端交互实现用户信息注册登 录) 2&#xff09; 在线支付充值虚拟币&#xff1b;&#…

Ajax(七)+axios+跨域+JSONP

目录 1. XMLHttpRequest Level2的新特性——FormData对象管理表单数据&#xff08;一&#xff09; 用法&#xff08;二&#xff09; 2. XMLHttpRequest Level2的新特性—— 上传文件 3. XMLHttpRequest Level2的新特性—— 显示文件上传进度 4. jQuery高级用法 4.1 jQuery…

【AIOT】Python语音处理

语音信号有三个重要的参数&#xff1a;声道数、取样频率和量化位数。 声道数&#xff1a;可以是单声道或者是双声道采样频率&#xff1a;一秒内对声音信号的采集次数&#xff0c;44100Hz采样频率意味着每秒钟信号被分解成44100份。换句话说&#xff0c;每隔144100秒就会存储一次…

[附源码]计算机毕业设计Python本地助农产品销售系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

class80(CL80)双模蓝牙5.2热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09;软件支持一些常见问题解答&#xff08;FAQ&#xff09;首次使用测试步骤蓝牙配对规则&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键蓝牙参数蓝牙…

【lssvm回归预测】基于鸽群算法优化最小二乘支持向量机PIO-lssvm实现数据回归预测附matlab代码

​✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法…

Python+Qt抽奖点名工具源码窗体程序

程序示例精选 PythonQt抽奖点名工具源码窗体程序 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQt抽奖点名工具源码窗体程序》编写代码&#xff0c;功能包括了抽奖点名&#xff0c;历史…

【DBN分类】基于粒子群算法优化深度置信网络PSO-DBN实现数据分类附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Enhancing Adversarial Training with Second-Order Statistics of Weights

利用二阶权重统计增强对抗训练 对抗训练已被证明是提高深度神经网络鲁棒性的最有效方法之一。它被形式化为对模型权重和对抗性扰动的最小-最大优化&#xff0c;其中权重可以通过梯度下降方法&#xff08;如SGD&#xff09;进行优化。在本文中&#xff0c;我们证明了将模型权重…

黑*头条_第2章_app端文章查看,静态化freemarker,分布式文件系统minIO(新版)

黑*头条_第2章_app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO&#xff08;新版&#xff09; 文章目录黑*头条_第2章_app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO&#xff08;新版&#xff09;1)文章列表加载1.1)需求分析1.2)表结构分析1…

2000-2020年全国31省城镇化率

2000-2020年全国31省城镇化率 1、时间&#xff1a;2000-2020年 2、范围&#xff1a;包括全国31个省 3、指标包括&#xff1a;总人口、城镇人口、农村人口、城镇化率 其中&#xff1a;城镇化率城镇人口/总人口 3、来源&#xff1a;整理自计NJ及各省统计NJ 4、指标解释&…

葵花宝典之C语言冷知识(一)

实用小课堂开课啦&#xff01;鸟类天堂&#xff1a; &#x1f9a2;一&#xff1a;函数类型的对应 &#x1f99c;代码呈现&#xff1a; &#x1f9a2;二&#xff1a;浮点数运算 &#x1f9a2;三&#xff1a;scanf的使用 &#x1f9a9; NUM 1&#xff1a;遇见空格&#xff0c;回车…

(附源码)Springboot北京东奥会志愿者报名系统 毕业设计 150947

Springboot北京北京东奥会志愿者报名系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对北…

数据挖掘Java——KNN算法的实现

一、KNN算法的前置知识 k-近邻&#xff08;kNN, k-NearestNeighbor&#xff09;是在训练集中选取离输入的数据点最近的k个邻居&#xff0c;根据这个k个邻居中出现次数最多的类别&#xff08;最大表决规则&#xff09;&#xff0c;作为该数据点的类别。 分类在数据挖掘中是一项…

底层网络知识详解:陌生的数据中心-第18讲-DNS协议:网络世界的地址簿

前面我们讲了平时常见的看新闻、支付、直播、下载等场景,现在网站的数目非常多,常用的网站就有二三十个,如果全部用IP地址进行访问,恐怕很难记住。于是,就需要一个地址簿,根据名称,就可以查看具体的地址。 例如,我要去西湖边的“外婆家”,这就是名称,然后通过地址簿…

Linux运维巡检流程工作总结

文章目录一 执行脚本获取数据二 登陆巡检环境2.1 将数据放在特定目录下2.2 在网页浏览器输入 ip:端口号/linux三 生成报告3.1 点击执行按钮&#xff0c;等待报告3.2 点击生成html文档&#xff0c;等待四 编写巡检文档4.1 提取所有检查的服务器IP、主机名、操作系统4.2 提取某些…

js实现放大镜效果

在我们平时见到很多购物网站都会有放大镜效果的出现&#xff0c;当我们将鼠标放在一个商品图片的上面&#xff0c;就会在旁边出现对应的放大效果。 效果图 实现步骤 实现原理是非常简单的&#xff0c;实际上是两张图片&#xff0c;一张原图和一张更大尺寸的图片。一开始通过c…

如何mount到网络为NAT方式的虚拟机

VMware Workstation我们一般两种虚拟机上网方式&#xff0c;一种bridge,一种NAT。bridge可以获得公网地址需要指定静态IP&#xff0c;而NAT是动态分配的内网地址了。设置bridge方式时往往指定的IP为内网IP&#xff0c;则无法正常上网&#xff1b;而设置NAT方式时共享本地网络可…

计算机毕业设计 HTML+CSS+JavaScript食品餐饮行业网站(10页)

&#x1f4c2;文章目录一、&#x1f468;‍&#x1f393;网站题目二、✍️网站描述三、&#x1f4da;网站介绍四、&#x1f310;网站效果五、&#x1fa93; 代码实现&#x1f9f1;HTML结构代码&#x1f492;CSS样式代码六、&#x1f947; 如何让学习不再盲目七、&#x1f381;更…