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 }