SpringBoot整合数据库之如何整合JdbcTemplate?怎么配置JdbcTemplate多数据源(连接多个数据库)?

2023-11-08

1 整合JdbcTemplate

1.1 引入需要的pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
   
1.2 application.properties中配置数据库连接信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=admin
1.3 创建数据库表及实体类

数据库

实体类User.java

public class User {
    private Integer id;
    private String username;
    private Integer age; 
    private String address;
	//省略getter和setter方法
}

1.4 注入JdbcTemplate编写增、删、改、查方法并测试
1.4.1 插入数据
@Service
public class UserService {
    //springboot引入spring-boot-stater-jdbc依赖后可直接注入JdbcTemplate使用
    @Autowired
    JdbcTemplate jdbcTemplate;
    //添加一条用户信息
    public Integer addUser(User user){
        return jdbcTemplate.update("insert into user (username,age,address) values (?,?,?)",
                                        user.getUsername(),user.getAge(),user.getAddress());
    }
}

编写测试方法并运行:


@SpringBootTest
class SpringbootdemoApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void test1() {
        User user = new User();
        user.setUsername("张三");
        user.setAge(17);
        user.setAddress("北京市");
        userService.addUser(user);
    }

}

数据成功插入user表
成功

1.4.2 查询数据

方式一:

public List<User> getAllUsers(){
        //适用于数据库表字段与实体类字段一致
        return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper(User.class));
}

测试方法及运行结果

@Test
void test2(){
    List<User> users = userService.getAllUsers();
    System.out.println(users);
}

查询结果
方式二:

public List<User> getAllUsers(){
        //适用于数据库表字段与实体类字段一致
        //return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper(User.class));
        //适用于数据库表字段与实体类字段不一致
        return jdbcTemplate.query("select * from user", new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                
                int id= rs.getInt("id");
                String username = rs.getString("username");
                int age = rs.getInt("age");
                String address = rs.getString("address");
                User user = new User();
                user.setId(id);
                user.setUsername(username);
                user.setAge(age);
                user.setAddress(address);
                return user;
            }
        });
        
    }

运行结果:
成功

1.4.3 修改用户信息

userService修改用户信息方法:

//通过id修改用户名
public Integer updateUserNameById(User user){
    return jdbcTemplate.update("update user set username=? where id=?",user.getUsername(),user.getId());
}

测试方法:

@Test
void test3(){
    User user = new User();
    user.setId(1);
    user.setUsername("李四");
    userService.updateUserNameById(user);
    test2();
}

运行结果:

成功

1.4.4 删除用户信息

userService删除方法

public Integer deleteUserById(Integer id){
        return jdbcTemplate.update("delete from user where id = ?",id);
}

测试方法:

@Test
void test4(){
    userService.deleteUserById(1);
    test2();
}

运行结果:
数据删除成功

2 配置JdbcTemplate多数据源

2.1 准备

首先准备两个数据库,方便起见,数据库表及字段一致,数据库名称不一致,如下:
在这里插入图片描述
两张表数据分别如下:
test数据库user表
test数据库user表
test01数据库user表
在这里插入图片描述

2.2 application.properties中配置两个数据源如下:
#test数据库数据源
spring.datasource.test.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.test.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.test.username=root
spring.datasource.test.password=admin
#test01数据库数据源
spring.datasource.test01.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.test01.url=jdbc:mysql://127.0.0.1:3306/test01
spring.datasource.test01.username=root
spring.datasource.test01.password=admin
2.3 编写配置类注入数据源到JdbcTemplate
@Configuration
public class WebMvcConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.test")
    DataSource test(){
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.test01")
    DataSource test01(){
        return DruidDataSourceBuilder.create().build();
    }
}
2.4 配置不同数据源JdbcTemplate
@Configuration
public class JdbcTemplateConfig {

    @Bean//注入dsTest数据源到jdbcTemplateTest
    JdbcTemplate jdbcTemplateTest(@Qualifier("dsTest") DataSource dsTest){
        return new JdbcTemplate(dsTest);
    }
    @Bean//注入dsTest01数据源到jdbcTemplateTest01
    JdbcTemplate jdbcTemplateTest01(@Qualifier("dsTest01") DataSource dsTest01){
        return new JdbcTemplate(dsTest01);
    }
}
2.5 Service层引入两个不同数据源JdbcTemplate并查询
@Service
public class UserService01 {
    @Resource(name = "jdbcTemplateTest")
    JdbcTemplate jdbcTemplateTest;

    @Autowired
    @Qualifier("jdbcTemplateTest01")
    JdbcTemplate jdbcTemplateTest01;

    public List<User> selectUsersByTest(){
        return jdbcTemplateTest.query("select * from user", new BeanPropertyRowMapper(User.class));
    }
    public List<User> selectUsersByTest01(){
        return jdbcTemplateTest01.query("select * from user", new BeanPropertyRowMapper(User.class));
    }

}
2.6 查询测试
@Test
void test1(){
    List<User> usersByTest = userService01.selectUsersByTest();
    System.out.println("usersByTest:"+usersByTest);
    List<User> usersByTest01 = userService01.selectUsersByTest01();
    System.out.println("usersByTest01:"+usersByTest01);
}

运行成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合数据库之如何整合JdbcTemplate?怎么配置JdbcTemplate多数据源(连接多个数据库)? 的相关文章

  • 如何在 kubernetes 上使多个 pod 相互通信

    我是 Kubernetes 新手 我正在尝试通过 microk8s 将应用程序部署到 Kubernetes 该应用程序包含Python Flask后端 Angular前端 Redis和MySQL数据库 我将映像部署在多个 Pod 中 状态显
  • Laravel - 重复键批量插入更新大数据集

    我有大约 80k 条记录 每天需要多次运行插入 更新脚本 INSERT INTO my rankings id rank VALUES 1 100 2 99 3 102 80000 3 ON DUPLICATE KEY UPDATE ran
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • 当我在 MySQL 中使用 UUID 作为主键时,会如何影响性能

    我想知道当我在 MySQL 中使用 UUID 作为主键时 会对服务器的性能产生怎样或多大的影响 我想你正在使用InnoDB 无论如何你应该 因此 请阅读 高性能 MySQL 2ed 第 117 页中的以下章节 一般来说 从性能的角度来看 U
  • Mac 上的 Emacs 和 MySQL

    我尝试使用 sql mysql 模式 但 emacs 无法找到文件 目录 mysql 但是 我可以从终端访问它 如何将 emacs 中的 mysql 指向 usr local mysql bin mysql setq sql mysql p
  • 在Spring-Boot中,我们如何在同一个项目中连接两个数据库(Mysql数据库和MongoDB)?

    我正在尝试创建一个 Spring Boot 项目 其中我有一个要求 我想连接到不同的数据库 MySql 和 MongoDB 我是否需要做一些特殊的事情来连接到这两个数据库 或者 spring boot 会自动计算出自己连接到这两个数据库 我
  • 使用 PHP MySql 进行关键字搜索?

    我的 mysql 表中有标题 varchar 描述 text 关键字 varchar 字段 我保留了关键字字段 因为我认为我只会在这个字段中搜索 但我现在需要在所有三个字段中进行搜索 所以对于关键字 word1 word2 word3 我的
  • 了解自加入

    我正在练习自加入这是我在编写查询时不明白的事情 我有一张桌子 employee 员工表包含三个记录 id employee manager id 1 Ola NULL 2 Ahmed 1 3 Tove 1 最后一列 manager id 引
  • MySQL 存储浮点数

    我正在尝试保存这么长的浮点数 13 00386644742523 它基本上是 Lat 和 Lng 值 当我将它保存在数据库中时 它被存储为 13 0039 您应该明确使用精度并且类型应该是DECIMAL NOT FLOAT因为小数点后的每一
  • WooCommerce 中的分页

    我使用这个短代码在页面上显示产品的类别 但是当我们使用它时 它不会显示分页 因为我们的类别中有很多产品 我们使用以下代码 product category category snowpeak per page 12 columns 4 or
  • MySQL/PHP 插入同一行两次

    我不明白为什么这段代码会插入同一行两次 我已经将其精简为以下代码 它被插入的 MySQL 表中有 10 列 但即使查询中提到了所有这些列 它仍然插入 电子邮件受保护 cdn cgi l email protection 分两行 具有单独的主
  • 检查字段是否为空

    如果我想检查该字段是否有除 null 和空之外的其他字符 查询是否正确 select CASE WHEN description IS NULL THEN null WHEN description IS NOT NULL THEN not
  • Mysql 更快的 INSERT

    好的 我有大约 175k 个 INSERT 语句 相当大的 INSERT 语句 例如 INSERT INTO gast ID Identiteitskaartnummer Naam Voornaam Adres Postcode Stad
  • 如何从 mysqldump 中删除表

    如何删除 mysqldump 中包含大量表的一个大表的输出 我有一个 6 GB 大的数据库转储 但其中 90 只是一个日志记录表 cache entries 我的备份中不再需要它 如何轻松删除转储中描述大型日志记录表的部分 我找到了这个 h
  • 如何解决这个错误--dbWriteTable()

    我成功连接到 MYSQL DB 并尝试将结果写回数据库 dbWriteTable con predicted min forecast min 其中 Forecast min 只是双精度向量 我收到此错误消息 函数 类 fdef mtabl
  • 如何在SQL中编写连接查询[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 问题 给定 Employee 和 AnnualReviews 表 编写一个查询以返回所有从未接受过按 HireDate 排序的评论的员
  • 从 mysql 检索数据并通过电子邮件发送

    我有一个 php 页面 它显示 mysql 数据库中每个用户的课程表数据 如下所示 result mysql query sql echo table border 0 thead tr th Class Link th th Studen
  • MAMP Pro mysql 无法启动

    我遇到问题无法找到解决此问题的方法 我收到这个错误 2017 01 11 23 58 25 7fffbac563c0 InnoDB Operating system error number 2 in a file operation In
  • 如何使用 Sequel Pro 在导入过程中将字符串更改为日期?

    我正在尝试使用 Sequel Pro 将文件导入到 MySQL 表中 我知道我需要使用 STR TO DATE 但我无法找出正确的语法 我在每一行都收到一堆这样的错误 ERROR in row 1 You have an error in
  • MySQL使用long类型数字过滤varchar类型时返回额外记录

    一个简单的表格 CREATE TABLE tbl type test uid varchar 31 NOT NULL DEFAULT 0 value varchar 15 NOT NULL DEFAULT PRIMARY KEY uid E

随机推荐

  • 服务器装win10稳定吗,win11发布了,那么电脑安装win11稳定吗?win11稳定性介绍

    近期新的win11系统出去后 绝大多数用户都很希望 但也是有许多平稳用户由于还不知道这一系统如何 因此迟疑需不需要升级 实际上 现在是预览版系统镜像系统 或多或少会出现一点bug 但整体而言或是相对稳定 下面大家一起来看看win11平稳吗的
  • 代码随想录训练营第五十九天

    1 下一个更大元素II 题503 循环数组有两种方法 一是用同一个数组拼接成两个数组 实现假循环 二是遍历两遍 用求余的方法 求余的方法更简便 class Solution public vector
  • java 变量的生命周期

    这个要从作用域开始说起 像局部变量的作用域就是他的生命周期 比如if for switch等等这些 出了这个结构就销毁了 方法里的局部变量 在方法调用完就销毁 如果是类的成员变量 在类的相应的对象销毁的时候销毁 上面说的是普通变量 如果是静
  • 卷积处理过程模拟:用Python实现OpenCV函数filter2D等效的卷积功能

    一 引言 在 OpenCV Python 图像平滑处理 卷积函数filter2D详解及均值滤波案例 介绍了filter2D相关的功能及使用 下面老猿用Python numpy矩阵运算以及OpenCV Python的图像基础操作模拟实现一个卷
  • mybatis之执行sql语句

    写在前面 通过这篇文章的分析 已经生成了可以执行的sql语句了 本文来分析SQL语句具体的执行过程 想要系统学习的 可以参考这篇文章 重要 入口 当我们执行一次数据查询的时候 mybatis会通过org apache ibatis exec
  • 4路组相连cache设计_cache基本原理

    为什么要了解cache 在学习linux kernel的过程 经常会cache的概念 从软件层面的page buffer cache 再到硬件层面中CPU的L1 L2 L3 cache TLB 磁盘内部的硬件cache 以及编程时的cach
  • 集合框架--双向链表的模拟实现

    Java中的鏈表 分為三種 1 單向鏈表 由一個節點元素 可以找到相鄰的下一個節點元素 2 雙向鏈表 由一個節點元素 可以找到其相鄰的前 后節點元素 3 循環鏈表 由一個節點元素 可以找到其相鄰的前 后節點元素 由最后一個節點元素可以找到第
  • notepad使用回车与换行

    转载于 http www pythontab com html 2017 linuxkaiyuan 0115 1116 html 一 回车与换行定义 回车 r 本义是光标重新回到本行开头 r的英文return 换行 n 本义是光标往下一行
  • 浅谈Spring中的@Controller注解

    Spring 的 Controller 是单例还是多例 怎么保证并发的安全 controller默认是单例的 不要使用非静态的成员变量 否则会发生数据逻辑混乱 正因为单例所以不是线程安全的 Controller public class S
  • buuctf-misc-小明的保险箱

    小明的保险箱 题目提示四位纯数字密码 但是附件下载下来是jpg文件 猜测是压缩包文件 winhex查看时没有找到什么信息 但是看到了存在txt文件 binwalk一下 把文件放入共享文件夹 上一个博客有提及 binwalk 存在压缩文件 f
  • Java多线程实现的四种方式

    Java多线程实现的方式有四种 1 继承Thread类 重写run方法 2 实现Runnable接口 重写run方法 实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3 通过Callable和FutureT
  • ES6 扩展运算符-将伪数组转换为真正的数组-Array.from()-find()-findIndex()-includes()

    扩展运算符可以将数组拆分成以逗号分隔的参数序列 console把逗号当成console log的分隔符 输出在后台 a b c 扩展运算符的应用 1 数组合并 1 1 1 2 2 将类数组或可遍历对象转换为真正的数组 转换的目的 可以调用数
  • Mybatis

    一 Mybatis简介 1 1 简介 MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyBatis可以通过简单的 XML 或
  • Welcome to CSDN————My First Time Write Blog

    Welcome to CSDN My First Time Write Blog 蒟蒻到巨佬 遥不可及 的成长计划 新初一记 第一季自我总结 New hand 来自CSP的初一蒟蒻 请求巨佬教博客的正确 标准写法 2019年7月纪中中集训自
  • 使用最小花费爬楼梯

    到达第i级台阶的阶梯顶部的最小花费 有两个选择 最后踏上了第i级台阶 最小花费dp i 再迈一步到达第i级台阶楼层顶部 最后踏上了第i 1级台阶 最小花费dp i 1 再迈两步跨过第i级台阶直接到达第i级台阶的阶梯顶部 所以到达第i级台阶的
  • MATLAB中求图像中某一区域的质心

    在 MATLAB图像处理宝典 秦襄培 编 384页 有 一个regionprops函数 这个实现对二值图的多种描述 以下内容http blog 163 com zwg 1314 126 blog static 353332462011918
  • Android Studio 问题(二)Failed to find Build Tools revision 28.0.2

    在第一次配置使用Android Studio的时候 可能会出现 Failed to find Build Tools revision 28 0 2 此时 只需要根据提示 点击下方的连接进行安装即可 如果不出现下方的链接 点击右上角的 Tr
  • 使用Navicat远程连接服务器上的mysql数据库

    环境准备 服务器中安装mysql数据库 本地安装Navicat Premium 准备好服务器的ip地址 服务器登录密码 mysql数据库的密码等 服务器中mysql忘记密码解决方法 修改服务器中MySQL的登录设置 通过命令vim etc
  • npg收集指定多个文件目录存储大小监控指标

    原理 1 利用netdata的命令参数 collector textfile directory配置从指定文件读取监控指标信息 2 利用linux cron定时任务脚本收集指定目录存储空间大小信息写入 collector textfile
  • SpringBoot整合数据库之如何整合JdbcTemplate?怎么配置JdbcTemplate多数据源(连接多个数据库)?

    1 整合JdbcTemplate 1 1 引入需要的pom依赖