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

  本文主要介绍基于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 }

 

posted @ 2023-03-10 15:49  无虑的小猪  阅读(95)  评论(0编辑  收藏  举报