首页 > 其他分享 >JDBC笔记(三):基于JDBC的工具包

JDBC笔记(三):基于JDBC的工具包

时间:2023-03-10 15:55:05浏览次数:53  
标签:JDBC JdbcTemplate 笔记 QueryRunner static 工具包 org import dataSource

  本文主要介绍基于JDBC的两个优秀的工具包,Apache DBUtils和SpringJDBC的基本应用。

1、Apache DBUtils

  DBUtils样例的官网地址:https://commons.apache.org/proper/commons-dbutils/examples.html

  DBUtils的核心类 QueryRunner、核心接口 ResultSetHandler。

  核心类QueryRunner提供的方法解决了代码重复的问题,通过数据源解决了数据库连接等资源管理的问题。

  核心接口RestSetHandler主要是结果集的处理,用户自行定义拓展。

1、添加maven依赖

 1 <!-- apache dbutils依赖包 -->
 2 <dependency>
 3     <groupId>commons-dbutils</groupId>
 4     <artifactId>commons-dbutils</artifactId>
 5     <version>1.7</version>
 6 </dependency>
 7 <dependency>
 8     <groupId>commons-dbcp</groupId>
 9     <artifactId>commons-dbcp</artifactId>
10     <version>1.4</version>
11 </dependency>
12 <dependency>
13     <groupId>commons-pool</groupId>
14     <artifactId>commons-pool</artifactId>
15 </dependency>
16 <!-- druid数据源依赖 -->
17 <dependency>
18     <groupId>com.alibaba</groupId>
19     <artifactId>druid</artifactId>
20     <version>1.0.9</version>
21 </dependency>
22 <!--添加mysql驱动-->
23 <dependency>
24     <groupId>mysql</groupId>
25     <artifactId>mysql-connector-java</artifactId>
26     <version>5.1.46</version>
27 </dependency>

2、工具类

  工具类获取QueryRunner实例

 1 import com.alibaba.druid.pool.DruidDataSource;
 2 import org.apache.commons.dbutils.QueryRunner;
 3 import java.util.Objects;
 4 
 5 public class ApacheDBUtils {
 6 
 7     private static final String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
 8     private static final String USERNAME = "root";
 9     private static final String PASSWORD = "root";
10 
11     private static QueryRunner queryRunner;
12     private static DruidDataSource dataSource;
13 
14     /**
15      * 获取数据库操作实例 - QueryRunner
16      * @return
17      */
18     public static QueryRunner getQueryRuner() {
19         if (Objects.nonNull(queryRunner)) {
20             return queryRunner;
21         }
22         // 获取数据源
23         dataSource = getDataSource();
24         // 根据当前数据源创建queryRunner对象
25         queryRunner = new QueryRunner(dataSource);
26         return queryRunner;
27     }
28 
29     /**
30      * 获取Druid数据源
31      * @return
32      */
33     public static DruidDataSource getDataSource() {
34         if (Objects.nonNull(dataSource)) {
35             return dataSource;
36         }
37         // 创建Druid数据源
38         dataSource = new DruidDataSource();
39         // 设置jdbc连接
40         dataSource.setUrl(URL);
41         // 设置用户名/密码
42         dataSource.setUsername(USERNAME);
43         dataSource.setPassword(PASSWORD);
44         // 设置最大/小空闲连接数
45         dataSource.setMinIdle(5);
46         dataSource.setMaxActive(10);
47         return dataSource;
48     }
49     
50 }

3、数据库查询

 1 public void getUserInnfo() throws Exception { 
 2     // 获取QueryRunner对象
 3     QueryRunner queryRunner = ApacheDBUtils.getQueryRuner();
 4     // 创建结果集处理器
 5     ResultSetHandler<User> resultSetHandler = new BeanHandler<User>(User.class);
 6     try {
 7         // 执行查询并获得结果
 8         List<User> userList = queryRunner.execute("select * from user where id = ?", resultSetHandler, 101);
 9         System.out.println(userList);
10     } catch (SQLException e) {
11         e.printStackTrace();
12     }
13 }

2、SpringJDBC

  Spring也提供了JDBC的封装操作。在Spring中的 JdbcTemplate 里 封装了各种各样的 execute,query和update方法。

  JdbcTemplate是JDBC的核心包的中心类,简化了JDBC的操作,封装了JDBC的核心流程,应用只要提供SQL语句,提取结果集就可以了,并且JdbcTemplate是线程安全的。

1、添加依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>

2、配置类

  配置类中创建数据源、JdbcTemplate等bean信息。
 1 import com.alibaba.druid.pool.DruidDataSource;
 2 import org.springframework.context.annotation.Bean;
 3 import org.springframework.context.annotation.Configuration;
 4 import org.springframework.jdbc.core.JdbcTemplate;
 5 import javax.sql.DataSource;
 6 
 7 @Configuration
 8 public class SpringJdbcConfig {
 9 
10     private static final String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
11     private static final String USERNAME = "root";
12     private static final String PASSWORD = "root";
13 
14     @Bean
15     public DataSource dataSource() {
16         DruidDataSource dataSource = new DruidDataSource();
17         // 设置jdbc连接
18         dataSource.setUrl(URL);
19         // 设置用户名/密码
20         dataSource.setUsername(USERNAME);
21         dataSource.setPassword(PASSWORD);
22         // 设置最大/小空闲连接数
23         dataSource.setMinIdle(5);
24         dataSource.setMaxActive(10);
25         return dataSource;
26     }
27 
28     @Bean
29     public JdbcTemplate jdbcTemplate(DataSource dataSource) {
30         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
31         return jdbcTemplate;
32     }
33 }

3、单元测试查询

 1 import com.SnailsBaseApplication;
 2 import com.snails.jdbc.entity.User;
 3 import org.junit.Test;
 4 import org.junit.runner.RunWith;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.boot.test.context.SpringBootTest;
 7 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 8 import org.springframework.jdbc.core.JdbcTemplate;
 9 import org.springframework.test.context.junit4.SpringRunner;
10 import java.util.List;
11 
12 @RunWith(SpringRunner.class)
13 @SpringBootTest(classes = SnailsBaseApplication.class)
14 public class JDBCTest {
15 
16     @Autowired
17     JdbcTemplate jdbcTemplate;
18 
19     @Test
20     public void testSpringJDBCQuery() {
21         String sql = "select * from user";
22         List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
23         userList.forEach(user -> {
24             System.out.println(user);
25         });
26     }
27 }

 

标签:JDBC,JdbcTemplate,笔记,QueryRunner,static,工具包,org,import,dataSource
From: https://www.cnblogs.com/RunningSnails/p/17203606.html

相关文章

  • Springcloud学习笔记56--SpringBoot之GET请求与Post请求参数偶发性丢失问题
    1.概述最近遇到一个偶现的问题,在向服务端请求的时候,偶尔会出现异常,在请求中的queryString传递了参数,却出现了异常MissingServletRequestParameterException如下所示:or......
  • 组合数学课程笔记(三):生成函数
    序离散和连续的不期而遇,抽象与数分的阴阳交融。我将以加与乘的生铁铸就组合的奇迹,这世间都要把你的伟岸与光辉所传颂。$\mathfrak{GeneratingFunction}$生成函数所......
  • TypeScript学习笔记#1 基础变量
    TypeScript学习笔记#1基础变量1.声明变量,指定变量类型letnum:number;num=10;2.基础类型类型名称写法值string字符串类型letname:string="bob";......
  • 学习OpenTk,笔记一
    说明,由于对图形化感兴趣,之前也从来没有大的接触,只是简单的使用GDI+绘图,比如验证码、水印等简单操作,至此想多深入了解一下。版本OpenTK4.7.4,目前封装OpenGL最好的库,包含O......
  • Unity 火炬之光 部分学习笔记(一) 游戏整体架构
    mmo开源项目泰课正版课程跳转链接b站学习视频跳转链接【RPG类游戏复刻-火炬之光】开源项目源码学习跳转链接(项目为16年的,使用的NGUI)仅作为个人学习笔记,只记录......
  • 一台很久不用的笔记本开机黑屏问题
    情况描述:一台笔记本放着2年很久没用了,笔记本的电池我之前就已经知道它储蓄不了电,只能电源线一直插电脑才能开机。然后现在笔记本想拿出来用,发现就算插电源线,电源灯光亮,电脑......
  • opencv初学笔记2(颜色提取与转换)
    opencv初学笔记2(颜色提取与转换)在面对完全不认识的一个技术时,茫然是不可避免的。但是在好奇与任务的驱使下,我一点点地去探索opencv的世界,一点点的试错与调试十分枯燥,可是......
  • https原理究极学习笔记
    介绍相信很多人,对https的过程不清楚,只是知道https是安全加密的,背后的原理,过程并不清楚我曾经也是对https的过程并不清楚,一知半解,而且最可气的是每次面试,面试官很可能就问......
  • pytorch中GroupNorm的使用(笔记)
    不使用BatchNorm的原因  相比起batchNorm,groupNorm对一个batch的size更不敏感。在现有的研究中,batchNorm在batchsize越大的情况下,效果更佳,batchsize=32的情况明显优于ba......
  • opencv初学笔记
    黑马程序员【黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程】https://www.bilibili.com/video/BV1Fo4y1d7JL?vd_source=2f130c342f954b6e380a92c05c8b4252......