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多数据源(连接多个数据库)? 的相关文章

随机推荐

  • 服务器装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依赖