Apache-DBUtils

开源的JDBC工具类,对JDBC的简单封装

SQL操作交给了QueryRunner的实例

Maven依赖

<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>

常用API

插入语句测试【删改同理操作】

    @Test
public void dbTest() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByOriginalJdbc();
String sql = "insert into user(user_name,user_password,user_createTime) values(?,?,?);";
int update = queryRunner.update(connectionByOriginalJdbc, sql, "你弟含王", "121314",CompleteJdbcUtils.parseToSqlDate("1997-09-06"));
System.out.println(update);
CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
}

查询单个的QueryRunner

- BeanHandler<T>

    @Test
public void dbTest2() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
// 实体类处理器对象
BeanHandler<User> beanHandler = new BeanHandler<User>(User.class);
String sql = "select * from user where user_id = ?;";
// 根据BeanHandler反射过去 只能处理单个对象返回
User query = queryRunner.query(connectionByOriginalJdbc, sql, beanHandler,3);
System.out.println(query);
CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
}

用Map封装单个记录的 MapHandler,默认泛型<String,Object>

    @Test
public void dbTest21() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
// 实体类处理器对象
MapHandler mapHandler = new MapHandler(); // <String,Object>
String sql = "select * from user where user_id = ?;";
// 根据BeanHandler反射过去 只能处理单个对象返回
Map<String, Object> map = queryRunner.query(connectionByOriginalJdbc, sql, mapHandler, 3);
System.out.println(map);
CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
}

多个记录的BeanListHandler<T>处理

    @Test
public void dbTest3() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
// 实体类处理器对象
BeanListHandler<User> beanHandler = new BeanListHandler<User>(User.class);
String sql = "select * from user;";
// 根据BeanHandler反射过去 返回List集合封装的对象的处理
List<User> users = queryRunner.query(connectionByOriginalJdbc, sql, beanHandler);
for (User user:users) {
System.out.println(user);
}
CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
}

或者是MapListHandler,泛型是<String,Object>

    @Test
public void dbTest31() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
// 实体类处理器对象
MapListHandler mapListHandler = new MapListHandler();
String sql = "select * from user;";
List<Map<String, Object>> maps = queryRunner.query(connectionByOriginalJdbc, sql, mapListHandler);
for (Map map:maps) {
System.out.println(map);
}
CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
}

ScalarHandler 用于特殊值的获取,例如聚合函数的操作

https://www.bilibili.com/video/BV1eJ411c7rf?p=53

自定义结果集处理器的方法

https://www.bilibili.com/video/BV1eJ411c7rf?p=54

JdbcTemplate来源于SpringJDBC

提供一个JDBC的模板来实现CRUD

本身不提供连接池和JDBC的功能,专门用于CRUD

所以你还需要前面所学过 厂商驱动 & 数据源【连接池】

这里不再赘述

导入依赖

        <!-- SpringJDBC JdbcTemplate -->

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.6.RELEASE</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.6.RELEASE</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.6.RELEASE</version>
</dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>

常用的方法:

- update() 增、删、改

- queryForMap() 查询单个结果返回Map容器

- queryForList() 查询多个结果返回List容器

- query() 查询单个结果返回实体类对象

- queryForObject() 查询单个结果返回原型

UPDATE

    @Test
public void update(){
org.springframework.jdbc.core.JdbcTemplate jdbcTemplate = new org.springframework.jdbc.core.JdbcTemplate(CompleteJdbcUtils.getDataSourceFromHikari()); String sql = "UPDATE user SET user_name = ?,user_password = ? WHERE user_id = ?"; int update = jdbcTemplate.update(sql,"阿伟2","333666",1); System.out.println(update);
}

调用存储过程和函数的资料:

https://www.cnblogs.com/lz2017/p/7500411.html

【Java】JDBC Part6 Apache-DBUtil & Spring-JdbcTemplate的更多相关文章

  1. 【Java】JDBC连接数据库

    JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...

  2. 【Java】JDBC连接MySQL

    JDBC连接MySQL 虽然在项目中通常用ORM的框架实现持久化.但经常因测试某些技术的需要,要写一个完整的JDBC查询数据库.写一个在这儿备份. 首先引入驱动包: <dependencies& ...

  3. 【Java】JDBC编程套路

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5847020.html 学习Java开发,一个必须掌握的知识点,就是数据库操作.当程序需要用到的数据达到一定程度 ...

  4. 【shiro】报错:Caused by: java.lang.ClassNotFoundException: org.apache.shiro.spring.LifecycleBeanPostProcessor

    Caused by: java.lang.ClassNotFoundException: org.apache.shiro.spring.LifecycleBeanPostProcessor at o ...

  5. 【报错】spring整合activeMQ,pom.xml文件缺架包,启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler

    spring版本:4.3.13 ActiveMq版本:5.15 ======================================================== spring整合act ...

  6. 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]-  JDBC Style:EBook Series:Java ...

  7. 【Java】代处理?代理模式 - 静态代理,动态代理

    >不用代理 有时候,我希望在一些方法前后都打印一些日志,于是有了如下代码. 这是一个处理float类型加法的方法,我想在调用它前打印一下参数,调用后打印下计算结果.(至于为什么不直接用+号运算, ...

  8. 【Java】模拟Sping,实现其IOC和AOP核心(二)

    接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个 ...

  9. 【Java】模拟Sping,实现其IOC和AOP核心(一)

    在这里我要实现的是Spring的IOC和AOP的核心,而且有关IOC的实现,注解+XML能混合使用! 参考资料: IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象 ...

  10. 【Java】一台服务器配置多个Tomcat

    需求缘由 最近接收了一个新的工具业务:ipublish发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦.这尼玛 哪个公司都不敢这么牛逼的和用户 ...

随机推荐

  1. 【INFINI Workshop 深圳站】8 月 31 日一起动手实验玩转 Easysearch

    8 月 31 日下午 和 INFINI Labs 的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中.欢迎大家免费报名参加. 活 ...

  2. .net6 .net core web api json 遇到 400 错误

    环境: .net6 webapi 服务端模型声明 public class TongYiMinPgPayReq { public string mch_no { get; set; } public ...

  3. 使用edge浏览器时,怎么让alt+tab不切换他的子标签页而只在程序间切换?

    使用搜索按钮(WIN+Q),搜索"多任务设置",在弹出的窗口中看到"alt+tab"相关设置.选择"仅打开的窗口",ok搞定.

  4. 阿里云OSS图片上传和显示注意点

    1. java.lang.IllegalArgumentException: The object key "/image-业务名称/20230818/20230818-订单号参数-acci ...

  5. Linux中expr命令

    Linux中expr命令 shell中不能简简单单的加减乘除,需要使用expr.expr只能用于整数值,一般格式为 expr arg1 operator arg2 注意: 1. 运算符左右都有空格,如 ...

  6. DotNetGuide荣登GitHub C#中文 Trending 月榜第一

    前言 发现最近有一大批应届生同学和Java转.NET的同学加入了我们的DotNetGuide技术社区交流6群(其他5个群都已满500人,6群也已有340多个小伙伴了)今天看到DotNetGuide荣登 ...

  7. Wireshark抓包分析理解DHCP协议及工作流程

    一.DHCP简介   DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议.在大型局域网中,需要给很多主机配置地址信息,如果采用传统 ...

  8. QT学习:00 介绍

    --- title: framework-cpp-qt-00-介绍 date: 2020-04-08 15:41:54 categories: tags: - c/c++ - qt --- 章节描述: ...

  9. Oracle 三种分页方法

    Oracle的三层分页指的是在进行分页查询时,使用三种不同的方式来实现分页效果,分别是使用ROWNUM.使用OFFSET和FETCH.使用ROW_NUMBER() OVER() 1.使用ROWNUM ...

  10. CF911G 题解

    考虑分块. 如果你做过未来日记就会知道一个很明显的做法--值域并查集. 先考虑整块: 块内没有 \(x\) 则跳过本次操作. 块内有 \(x\) 没有 \(y\) 则令 \(fa[x] = y\) 块 ...