当前位置: 首页 > ops >正文

Druid与JdbcTemplate基本使用

Druid与JdbcTemplate基本使用

JdbcTemplate简介

大白话就是简化数据库crud使用的。

概述

JdbcTemplate是Spring框架提供的一个核心模块,位于spring-jdbc包中。它简化了传统JDBC编程的复杂性,为数据访问提供了更高级的抽象和便利方法。JdbcTemplate通过封装JDBC API的底层细节,让开发者能够更专注于SQL查询和业务逻辑,而不用处理繁琐的资源管理。

主要特性

  1. 自动资源管理:自动处理Connection、Statement和ResultSet的获取和释放
  2. 异常转换:将JDBC的SQLException转换为Spring的数据访问异常体系
  3. 回调机制:提供ResultSetExtractor、RowMapper等回调接口
  4. 简化操作:提供query、update、execute等便捷方法
  5. 参数处理:支持命名参数和位置参数绑定

与传统JDBC对比

特性传统JDBCJdbcTemplate
资源管理手动自动
异常处理需要捕获SQLException统一异常体系
代码量冗长简洁
可读性较低较高
事务管理复杂与Spring事务集成

基本使用示例

// 配置数据源
DataSource dataSource = new DriverManagerDataSource("jdbc:mysql://localhost:3306/test", "user", "password");// 创建JdbcTemplate实例
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 执行查询
List<User> users = jdbcTemplate.query("SELECT * FROM users WHERE age > ?",new Object[]{18},(rs, rowNum) -> new User(rs.getLong("id"),rs.getString("name"),rs.getInt("age"))
);// 执行更新
int rowsAffected = jdbcTemplate.update("UPDATE users SET name = ? WHERE id = ?","New Name", 1L
);

适用场景

  1. 中小型项目的数据访问层
  2. 需要快速开发的场景
  3. 对ORM框架有性能顾虑的项目
  4. 需要直接控制SQL的场合

优势与局限

优势

  • 轻量级,无额外学习成本
  • 性能接近原生JDBC
  • 与Spring生态无缝集成
  • 灵活控制SQL语句

局限

  • 需要手动编写SQL
  • 对象关系映射功能有限
  • 不适合复杂领域模型

DruidDataSource简介

DruidDataSource是阿里巴巴开源的高性能数据库连接池实现,是Druid连接池的核心组件。作为Java应用中常用的数据库连接管理工具,它在性能、功能和监控方面都有显著优势。

核心特性

  1. 高性能设计

    • 采用双重检测锁机制优化连接获取过程
    • 内置LRU算法优化连接缓存
    • 支持并行化连接创建
  2. 丰富的监控功能

    • 实时统计SQL执行情况
    • 提供连接池使用率监控
    • 支持慢SQL记录与分析
    • 内置WallFilter防止SQL注入
  3. 企业级功能

    • 支持分布式事务
    • 提供多种连接有效性检测机制
    • 可配置的连接泄露检测
    • 完善的异常处理机制

典型应用场景

  1. 高并发Web应用

    • 电商系统大促期间
    • 社交平台热点事件期间
    • 金融交易系统
  2. 微服务架构

    • Spring Cloud应用
    • Dubbo服务提供者
    • 分布式事务场景
  3. 数据密集型应用

    • 报表生成系统
    • 数据分析平台
    • 批量数据处理任务

配置示例

DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setInitialSize(5);     // 初始化连接数
dataSource.setMaxActive(20);      // 最大连接数
dataSource.setMinIdle(5);         // 最小空闲连接数
dataSource.setMaxWait(60000);     // 获取连接最大等待时间
dataSource.setTimeBetweenEvictionRunsMillis(60000); // 检测间隔
dataSource.setMinEvictableIdleTimeMillis(300000);   // 最小空闲时间

优势对比

特性DruidHikariCPTomcat JDBC
性能极高中等
监控完善基础基础
功能丰富基础基础
SQL防护支持不支持不支持
扩展性一般一般

DruidDataSource特别适合需要详细监控SQL执行情况或对数据库安全性要求较高的企业级应用场景。


JdbcTemplate与DruidDataSource结合使用Demo

    @Testpublic void testJdbcTemplate() {/*** JdbcTemplate 简化数据库的crud操作,不提供连接池* DruidDataSource 负责连接池的创建和数据库驱动的注册等等。*/
//        // 0. 创建连接池对象DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl("jdbc:mysql://localhost:3306/test");dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//驱动dataSource.setUsername("root");dataSource.setPassword("123456");//        1. 实例化对象JdbcTemplate jdbcTemplate = new JdbcTemplate();// ¥¥¥  核心jdbcTemplate.setDataSource(dataSource); // 设置连接池
//        2. 调用方法jdbcTemplate.update("sql语句", "参数1", "参数2", "..."); // 可执行 DDL,DML。DCL 等非查询语句jdbcTemplate.queryForObject("sql语句", "参数1", "参数2", "...", 返回值类型.class); // 查询单行单列数据jdbcTemplate.query(); // DQL查询集合}

涉及依赖

        <!--        数据库和连接池--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.0.6</version></dependency>
http://www.xdnf.cn/news/17018.html

相关文章:

  • vscode 关闭自动更新
  • 从达梦到 StarRocks:国产数据库实时入仓实践
  • Memcached 缓存详解及常见问题解决方案
  • P1002 [NOIP 2002 普及组] 过河卒
  • 06 基于sklearn的机械学习-欠拟合、过拟合、正则化、逻辑回归、k-means算法
  • 【RH124知识点问答题】第8章 监控和管理 Linux 进程
  • 关于解决WinRiver项目动态XmlElement的序列化与反序列化的问题
  • 2.1 vue组件
  • EXCEL删除数据透视表
  • HTTP各个版本对比
  • 网络资源模板--基于Android Studio 实现的消消乐游戏
  • 【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度
  • 37. line-height: 1.2 与 line-height: 120% 的区别
  • Redis真的是单线程的吗?
  • 【Unity3D实例-功能-镜头】第三人称视觉
  • 四、Linux 的实用操作
  • 【目标检测基础】——yolo学习
  • Servlet 相关笔记整理
  • Java 的 APT(Annotation Processing Tool)机制详解
  • 力扣 hot100 Day65
  • 基于Matlab实现LDA算法
  • 数据结构——单向链表部分操作及valgrind安装
  • 单片机裸机程序设计架构
  • webm 读取解析
  • 各种信号分解、模态分解方法合集【MATLAB实现】
  • 网络相关命令
  • TorchDynamo源码解析:从字节码拦截到性能优化的设计与实践
  • 复合机器人抓取精度怎么测量?
  • 8.4 打卡 DAY 33: 第一个神经网络 - MLP的构建与训练
  • usr/bin/ld链接报错undefined reference `av_frame_free(AVFrame**)‘等ffmpeg库报错