Spring是如何进行数据库连接的

本文深入探讨了Spring如何使用JdbcTemplate进行数据库连接,从原生JDBC讲起,详细介绍了JdbcTemplate的query、update操作以及其底层实现。讨论了DataSource在Spring中的角色,强调了配置DataSource的重要性,并分享了JdbcTemplate的最佳实践。
摘要由CSDN通过智能技术生成

Table of Contents

概述

java原生JDBC

JdbcTemplate

jdbcTemplate查询query

jdbcTemplate更新操作update/delete...

JdbcTemplate的query底层是如何实现的?

JdbcTemplate最佳实践

数据库连接和DataSource

总结


本篇博客基于java8.

概述

Spring框架提供了可扩展的SQL数据库的支持。然而spring的东西使用久了之后,如果不去了解背后的原理的话可能越来越迷糊,本篇博客的目的是为了 分析spring框架如何实现的和各种数据库在各种场景下的连接配置的问题。我们将从最原生java数据库连接讲起。

java原生JDBC

相信不少学习java的朋友在第一次接触数据库的时候,一定都接触过最原生的数据库连接,以mysql为例,大致代码按如下:


 
 
 
  1. try{
  2. //加载JDBC驱动程序:
  3. Class.forName( "com.mysql.jdbc.Driver");
  4. String url = "jdbc:mysql://127.0.0.1:3306/dbname";
  5. String username = "";
  6. String password = "";
  7. // 创建与MySQL数据库的连接类的实例
  8. Connection conn = DriverManager.getConnection(url, username, password);
  9. // 用conn创建Statement对象类实例
  10. Statement sql_statement = conn.createStatement();
  11. // 执行sql
  12. ResultSet result = sql_statement.executeQuery(query);
  13. //处理结果
  14. ...
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. } finally {
  18. if (conn != null) {
  19. // 关闭连接
  20. try {
  21. conn.close();
  22. System.out.println( "Database connection terminated");
  23. } catch (Exception e) { /* ignore close errors */
  24. }
  25. }
  26. }

上面的代码就是纯jdbc的连接数据库代码,只需安装jdk导入java 的原生包就可以写出来,不需要使用任何第三方的包。

上述代码主要有下面这几个步骤:

  1. 加载JDBC驱动程序
  2. 创建数据库的连接(需要用户名密码等信息) 
  3. 创建一个Statement  
  4. 执行SQL语句(处理结果)
  5. 处理异常,关闭连接  

上面的代码可以看出一些问题,比如模版代码过多,对于一个用户来说,他可能只是想执行一条sql语句,并不想关心其他连接,异常处理,加载驱动的问题。我们可以很容易想到的是,如果有一个方法或者一个工具,让用户可以只需要指定好数据库连接信息,就可以执行各种数据库操作,岂不是非常好吗?这就是框架开发这想做的事情。

JdbcTemplate

JdbcTemplate是spring提供的最经典也是最流行的jdbc实现方式之一。现在除了JdbcTemplate之外,还有SimpleJdbcInsert,SimpleJdbcCall两个更新的实现方式。

JdbcTemplate是“最底层”的方法,所有其他spring的方法在他们的包装之下都使用了JdbcTemplate。

JdbcTemplate是spring JDBC core这个包中的重点类。 它处理资源的创建和释放,帮助我们避免常见错误,例如上面直接使用java原生代码而忘记关闭连接。 它执行核心JDBC工作流的基本任务(例如语句创建和执行),应用程序代码只需要提供SQL并提取结果。 JdbcTemplate类主要包含下面这些功能:

  • 执行SQL查询语句
  • 执行更新语句和存储过程调用
  • 对ResultSet实例执行迭代并提取返回的参数值。
  • 捕获JDBC异常并将它们转换为org.springframework.dao packag中定义的通用的,信息量更大的异常层次结构。

使用jdbcTemplate需要配置datasource。使用spring ioc容器的话,则可以把datasource配置为一个bean,直接让数据库操作的时候引用即可。spring文档特别指出:应始终将DataSource配置为Spring IoC容器中的bean。这说明spring对于ioc容器中的datasource bean提供了非常多方便的功能。

我们可以使用jdbcTemplate来执行查询,更新,以及一些其他操作。如下:

jdbcTemplate查询query

下面的例子是返回数据的数量

int rowCount = this.jdbcTemplate.queryForObject("select count(*) from t_actor", Integer.class);
 
 
 

下面的查询是返回一个字符串:


 
 
 
  1. String lastName = this.jdbcTemplate.queryForObject(
  2. "select last_name from t_actor where id = ?",
  3. new Object[]{ 1212L}, String.class);

也可以查询并填充单个对象:


 
 
 
  1. Actor actor = this.jdbcTemplate.queryForObject(
  2. "select first_name, last_name from t_actor where id = ?",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值