JDBC模板简介

294 阅读5分钟

JDBC template

JDBC模板简介

JDBC模板是spring框架中提供的一个类,用于从java应用程序中对数据库进行操作,遵循相同的JDBC概念,但节省了大量重复的代码,并使其更容易和有效,因为它自己处理异常处理和事务管理。JDBC模板类的全称是org.springframework.jdbc.core.JdbcTemplate类。在这篇文章中,我们将了解JDBC模板的一般用法和要求,简单介绍它,它的语法以及它是如何在某些例子的帮助下工作的。

JDBC类的需求

当使用传统的Java数据库连接方法时,所有与连接的创建、关闭和处理流程相关的代码都是由开发人员来完成的。以下是JDBC的缺点----

  • 像导入所有文件、创建和建立与数据库的连接、准备查询和关闭连接对象的代码需要在执行代码之前和之后手动完成,查询需要写。
  • 基于数据库应用的逻辑的异常处理的相关代码也需要完成。
  • 在事务的情况下,事务管理需要通过我们自己编码的方式手动完成。
  • 所有为上述工作编写的代码都需要重复,当它需要从一个数据库逻辑转移到另一个数据库逻辑时,会消耗大量的时间。

传统的JDBC的上述所有缺点都是JDBC模板的优点,因为它消除了所有这些缺点。JDBC模板可以节省时间

因为我们可以直接去执行你想执行的查询,并在一个配置文件中提到所有其他与连接有关的细节。

它是如何工作的以及JDBC模板的介绍?

JDBC核心包由中心类组成,其名称为org,springframework.jdbc.core.JdbcTemplate,也被称为JDBC模板,一般用于避免我们在使用JDBC时出现的各种常见错误。这个模板负责执行所有与JDBC相关的核心工作流程,这样应用程序就只需要提供需要执行的SQL查询,并提取同样的结果,可以进一步被应用程序使用。这使得开发人员非常简单,只需专注于业务逻辑和相应的代码,将所有其他的核心相关功能留给JDBC模板处理。

JDBC模板负责执行所有通过的查询,检索数据,更新和执行所有对结果集的迭代。它进一步处理在进行数据库相关操作时可能出现的所有异常,并将它们转换为通用的异常。你可以在这个包org.springframework.dao中获得与JDBC模板处理的异常层次有关的信息。

语法 -

现在,让我们看看JDBC模板类的一般声明,以了解它扩展了哪些类,哪些接口是由它实现的。下面是它的声明 -

Public class JdbcTemplate extends JdbcAccessor implements JdbcOperations

使用它时需要遵循的步骤包括

  • 通过使用数据源配置,我们应该创建一个JdbcTemplate类的对象。
  • 此外,在你的应用程序和与之相关的类中,你应该使用这个类中提供的方法来执行数据库操作。

使用JDBC模板的query)方法来执行查询语句的语法如下----

String sampleQueryVar = query statement;
List <Object/type> sampleListVar = jdbcTemplateObject.query(sampleQueryVar, new row mapper object)

在上述语法中使用的术语描述如下

  • sampleQueryVar - 这是一个变量,它被声明用来保存我们需要执行的查询语句。
  • sampleListVar - 这是一个变量,它将存储执行查询语句后检索的所有数据。这个变量的数据类型随我们将要执行的查询语句而变化。
  • 查询语句 - 这是我们需要在数据库中执行的查询,其结果需要在应用程序中使用。它可以是任何操作语句,如SELECT, INSERT, DELETE或UPDATE。
  • row mapper对象 - 这是RowMapper类的对象,它将把每个检索到的行结果转换为目标格式的类对象。
  • jdbcTemplateObject - 为了从数据库中读取目标对象数据,我们将需要一个由我们创建的模板类对象。

例子

现在,让我们在一个例子的帮助下了解jdbc模板的实现。为此,我们将需要eclipse IDE,并在其中创建一个spring应用程序。它将包含以下指定的文件

ArticlesDAO.java文件将是我们的数据访问对象接口,它将包含以下代码

package com.educbaOrganization;
import java.util.List;
import javax.sql.DataSource;
public interface ArticlesDAO {
public void setDataSource(DataSource ds);
public List<Article> listArticles();
}
Article.java file.
package com.educbaOrganization;
public class Article {
private Integer number_of_words;
private String article_name;
private Integer article_id;
public void setNumber_of_words(Integer number_of_words) {
this.number_of_words = number_of_words;
}
public Integer getNumber_of_words() {
return number_of_words;
}
public void setArticleName(String article_name) {
this.article_name = article_name;
}
public String getArticleName() {
return article_name;
}
public void setArticleId(Integer article_id) {
this.article_id = article_id;
}
public Integer getArticleId() {
return article_id;
}
}
ArticleMapper.java file.
package com.educbaOrganization;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class ArticleMapper implements RowMapper<Article> {
public Article mapRow(ResultSet rs, int rowNum) throws SQLException {
Article article = new Article();
article.setArticleId(rs.getInt("article_id"));
article.setArticleName(rs.getString("article_name"));
article.setNumber_of_words(rs.getInt("number_of_words"));
return article;
}
}
Following is the implementation class file ArticleJDBCTemplate.java for the defined DAO interface ArticlesDAO.
package com.educbaOrganization;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class ArticleJDBCTemplate implements ArticlesDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
}
public List<Article> listArticles() {
String SQL = "select * from educba_articles";
List <Article> articles = jdbcTemplateObject.query(SQL, new ArticleMapper());
return articles;
}
}
MainApp.java file
package com.educbaOrganization;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.educbaOrganization.ArticleJDBCTemplate;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
ArticleJDBCTemplate articleJDBCTemplate =
(ArticleJDBCTemplate)context.getBean("articleJDBCTemplate");
System.out.println("The following is the result containing the records" );
List<Article> articles = articleJDBCTemplate.listArticles();
for (Article record : articles) {
System.out.print("ID : " + record.getArticleId() );
System.out.print(", ArticleName : " + record.getArticleName() );
System.out.println(", Number_of_words : " + record.getNumber_of_words());
}
}
}
Beans.xml file
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
<bean article_id="dataSource"
class = "org.springframework.jdbc.datasource.DriverMannumber_of_wordsrDataSource">
<property name = "driverClassArticleName" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
<property name = "userarticle_name" value = "root"/>
<property name = "password" value = "admin"/>
</bean>
<bean article_id="articleJDBCTemplate"
class = "com.educbaOrganization.ArticleJDBCTemplate">
<property name = "dataSource" ref = "dataSource" />
</bean>
</beans>

输出

JDBC template output 1

我们可以通过对我们的数据库进行以下查询来交叉检查数据库的内容----

SELECT * FROM [educba_articles];

上述查询的输出是 --

JDBC template output 2

总结

使用JDBC模板使得使用JDBC进行数据库操作变得非常容易,因为我们只需要关注业务逻辑,其余所有的核心职责都由模板本身完成。