Spring JdbcTemplate示例

Spring JdbcTemplate是Spring JDBC包中最重要的类。

目录[ 隐藏 ]

  • 1 Spring JdbcTemplate

    • 1.1 Spring JdbcTemplate示例
    • 1.2 Spring JDBC Maven依赖项
    • 1.3 Spring DataSource配置
    • 1.4 Spring JDBC模型类
    • 1.5 Spring JDBC DAO类
    • 1.6 Spring JdbcTemplate测试程序

Spring JdbcTemplate

  • JDBC产生了大量的锅炉板代码,例如打开/关闭与数据库的连接,处理sql异常等。它使代码非常麻烦且难以阅读。
  • 在Spring Framework中实现JDBC 需要处理许多低级操作(打开/关闭连接,执行SQL查询等)。
  • 多亏了这一点,在Spring Framework中使用数据库时,我们只需要从数据库定义连接参数并注册SQL查询,我们的其余工作由Spring执行。
  • Spring中的JDBC有几个类(几种方法)用于与数据库交互。其中最常见的是使用JdbcTemplate该类。这是管理所有事件和数据库连接的处理的基类。
  • JdbcTemplate类执行SQL查询,遍历ResultSet并查询被调用的值,更新指令和过程调用,“捕获”异常,并将它们转换为org.springframwork.dao包中定义的异常。
  • JdbcTemplate类的实例是线程安全的。这意味着通过配置JdbcTemplate类的单个实例,我们可以将它用于几个DAO对象。
  • 使用JdbcTemplate时,通常是在Spring配置文件中配置它。之后,它在DAO类中使用bean实现。

Spring JdbcTemplate示例

我们来看看Spring JdbcTemplate示例程序。我在这里使用Postgresql数据库,但您也可以使用任何其他关系数据库,例如MySQL和Oracle。您所需要的只是更改数据库配置,它应该工作。

首先,我们需要一些样本数据来处理。下面的SQL查询将创建一个表并用一些数据填充它供我们使用。


create table people (
id serial not null primary key,
first_name varchar(20) not null,
last_name varchar(20) not null,
age integer not null
);insert into people (id, first_name, last_name, age) values
(1, 'Vlad', 'Boyarskiy', 21),
(2,'Oksi', ' Bahatskaya', 30),
(3,'Vadim', ' Vadimich', 32);

下图显示了Eclipse中的最终项目结构。

Spring JDBC Maven依赖项

我们需要以下依赖性- ,,spring-core 和。如果您使用任何其他关系数据库(如MySQL),则添加相应的java驱动程序依赖项。这是我们的最终pom.xml文件。spring-contextspring-jdbcpostgresql


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev.spring</groupId><artifactId>JdbcTemplate</artifactId><version>1.0-SNAPSHOT</version><properties><spring.framework>4.3.0.RELEASE</spring.framework><postgres.version>42.1.4</postgres.version></properties><dependencies><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${postgres.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.framework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.framework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.framework}</version></dependency></dependencies></project>

Spring DataSource配置

下一步是创建spring配置类来定义DataSourcebean。我使用的是基于java的配置,你也可以使用spring bean配置xml文件。


package com.journaldev.spring.config;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;@Configuration
@ComponentScan("com.journaldev.spring")
@PropertySource("classpath:database.properties")
public class AppConfig {@AutowiredEnvironment environment;private final String URL = "url";private final String USER = "dbuser";private final String DRIVER = "driver";private final String PASSWORD = "dbpassword";@BeanDataSource dataSource() {DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();driverManagerDataSource.setUrl(environment.getProperty(URL));driverManagerDataSource.setUsername(environment.getProperty(USER));driverManagerDataSource.setPassword(environment.getProperty(PASSWORD));driverManagerDataSource.setDriverClassName(environment.getProperty(DRIVER));return driverManagerDataSource;}
}
  • @Configuration - 说这个类是Spring上下文的配置。
  • @ComponentScan(“com.journaldev.spring”) - 指定要扫描组件类的包。
  • @PropertySource(“classpath:database.properties”) - 表示将从database.properties文件中读取属性。

的内容database.properties文件如下所示。


driver=org.postgresql.Driver
url=jdbc:postgresql://127.0.0.1:5432/school
dbuser=postgres
dbpassword=postgres

如果您使用的是MySQL或其他一些关系数据库,请相应地更改上述配置。

Spring JDBC模型类

下一步是创建模型类来映射我们的数据库表。


package com.journaldev.model;public class Person {private Long id;private Integer age;private String firstName;private String lastName;public Person() {}public Person(Long id, Integer age, String firstName, String lastName) {this.id = id;this.age = age;this.firstName = firstName;this.lastName = lastName;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", age=" + age + ", firstName='" + firstName + '\'' + ", lastName='" + lastName+ '\'' + '}';}
}

要从数据库中获取数据,我们需要实现接口RowMapper。这个接口只有一个方法mapRow(ResultSet resultSet, int i),它将返回我们的模型类的一个实例(即Person)。


package com.journaldev.model;import java.sql.ResultSet;
import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class PersonMapper implements RowMapper<Person> {public Person mapRow(ResultSet resultSet, int i) throws SQLException {Person person = new Person();person.setId(resultSet.getLong("id"));person.setFirstName(resultSet.getString("first_name"));person.setLastName(resultSet.getString("last_name"));person.setAge(resultSet.getInt("age"));return person;}
}

Spring JDBC DAO类

最后一步是创建DAO类,使用sql查询将我们的模型类映射到数据库表。我们还将使用@Autowired注释配置DataSource 并公开一些API。


package com.journaldev.spring.dao;import java.util.List;import com.journaldev.model.Person;public interface PersonDAO {Person getPersonById(Long id);List<Person> getAllPersons();boolean deletePerson(Person person);boolean updatePerson(Person person);boolean createPerson(Person person);
}

package com.journaldev.spring.dao;import java.util.List;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;import com.journaldev.model.Person;
import com.journaldev.model.PersonMapper;@Component
public class PersonDAOImpl implements PersonDAO {JdbcTemplate jdbcTemplate;private final String SQL_FIND_PERSON = "select * from people where id = ?";private final String SQL_DELETE_PERSON = "delete from people where id = ?";private final String SQL_UPDATE_PERSON = "update people set first_name = ?, last_name = ?, age  = ? where id = ?";private final String SQL_GET_ALL = "select * from people";private final String SQL_INSERT_PERSON = "insert into people(id, first_name, last_name, age) values(?,?,?,?)";@Autowiredpublic PersonDAOImpl(DataSource dataSource) {jdbcTemplate = new JdbcTemplate(dataSource);}public Person getPersonById(Long id) {return jdbcTemplate.queryForObject(SQL_FIND_PERSON, new Object[] { id }, new PersonMapper());}public List<Person> getAllPersons() {return jdbcTemplate.query(SQL_GET_ALL, new PersonMapper());}public boolean deletePerson(Person person) {return jdbcTemplate.update(SQL_DELETE_PERSON, person.getId()) > 0;}public boolean updatePerson(Person person) {return jdbcTemplate.update(SQL_UPDATE_PERSON, person.getFirstName(), person.getLastName(), person.getAge(),person.getId()) > 0;}public boolean createPerson(Person person) {return jdbcTemplate.update(SQL_INSERT_PERSON, person.getId(), person.getFirstName(), person.getLastName(),person.getAge()) > 0;}
}

PersonDAOImplclass用@Component注释注释,在这个类中我们有类型的字段JdbcTemplate

当调用此类的构造函数时,DataSource将向其中注入一个实例,我们可以创建一个JdbcTemplate实例。之后我们可以在我们的方法中使用。

Spring JdbcTemplate测试程序

我们的Spring JdbcTemplate示例项目已准备好,让我们用测试类测试它。


package com.journaldev;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.journaldev.model.Person;
import com.journaldev.spring.config.AppConfig;
import com.journaldev.spring.dao.PersonDAO;public class Main {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);PersonDAO personDAO = context.getBean(PersonDAO.class);System.out.println("List of person is:");for (Person p : personDAO.getAllPersons()) {System.out.println(p);}System.out.println("\nGet person with ID 2");Person personById = personDAO.getPersonById(2L);System.out.println(personById);System.out.println("\nCreating person: ");Person person = new Person(4L, 36, "Sergey", "Emets");System.out.println(person);personDAO.createPerson(person);System.out.println("\nList of person is:");for (Person p : personDAO.getAllPersons()) {System.out.println(p);}System.out.println("\nDeleting person with ID 2");personDAO.deletePerson(personById);System.out.println("\nUpdate person with ID 4");Person pperson = personDAO.getPersonById(4L);pperson.setLastName("CHANGED");personDAO.updatePerson(pperson);System.out.println("\nList of person is:");for (Person p : personDAO.getAllPersons()) {System.out.println(p);}context.close();}
}

下图显示了执行上述程序时产生的输出。输出将根据样本数据和多次执行而有所不同,想法是在这里学习如何通过示例程序使用Spring JdbcTemplate。

这就是Spring JdbcTemplate,您可以从下面的链接下载最终项目。

下载Spring JdbcTemplate示例项目

参考:API Doc

Spring JdbcTemplate示例相关推荐

  1. Spring JDBC 示例

    Spring JDBC示例 Spring JDBC是本教程的主题.数据库是大多数企业应用程序不可或缺的一部分.因此,当谈到Java EE框架时,与JDBC的良好集成非常重要. 目录[ 隐藏 ] 1 S ...

  2. Spring JdbcTemplate + transactionTemplate 简单示例 (零配置)

    jdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTempla ...

  3. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  4. Spring JdbcTemplate+JdbcDaoSupport实例

    在Spring JDBC开发中,可以使用 JdbcTemplate 和 JdbcDaoSupport 类来简化整个数据库的操作过程. 在本教程中,我们将重复上一篇文章Spring+JDBC例子,看之前 ...

  5. 原生jdbc示例 与spring JDBC 示例

    个人博客:https://suveng.github.io/blog/​​​​​​​ 原生jdbc与spring整合 JDBC介绍 JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数 ...

  6. Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载

    原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...

  7. Struts2+Hibernate+Spring 整合示例

    转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...

  8. 转载:为什么使用ibatis而不用spring jdbcTemplate

    第一:ibatis仅仅是对jdbc薄薄的一层封装,完全不丧失sql的灵活性 第二:ibatis所有的sql都可以放在配置文件中,这样有利于sql的集中管理,特别是在sql tuning是很容易把得到所 ...

  9. Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)返回非映射实体类的解决方法

    Spring JdbcTemplate的queryForList(String sql , Class elementType)返回非映射实体类的解决方法 参考文章: (1)Spring JdbcTe ...

最新文章

  1. k8s使用kube-router网络插件并监控流量状态
  2. 【剑指offer-Java版】06重建二叉树
  3. 《系统集成项目管理工程师》必背100个知识点-43项目成本控制的主要内容
  4. 鸿蒙系统替代安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  5. pHp中文网零基础,零基础编程
  6. 前端学习(2962):前一天回顾
  7. 无刷新分页 jquery.pagination.js
  8. iOS小技巧之圆角图片
  9. 开课吧Java课堂:是什么是比较函数?
  10. 比较三个数,求最大数字 ( 应用条件运算符:?)
  11. 快速入门(完整):Python实例100个(基于最新Python3.7版本)
  12. 高速无人驾驶车辆防滑移MPC控制 学习笔记(未完结)
  13. oracle PL/SQL 这些查询结果不可更新,请包括ROWID或使用SELECT ...FOR UPDATE 获得可
  14. 雪球结构定价与风险深度分析
  15. 公司注册地址可以随便写吗,如何注册企业工商营业执照
  16. nvm安装使用及卸载
  17. 微型计算机的基本组成及各个部分的作用
  18. 俞军产品方法论读书心得笔记
  19. android 音量调节框,Android 音量调节方法
  20. 绝了!美图技术专家获取肉鸡服务器密码如探囊取物

热门文章

  1. jQuery .tmpl() 用法
  2. 关于大型网站技术演进的思考(四)--存储的瓶颈(4)
  3. 人工智障学习笔记——深度学习(4)生成对抗网络
  4. ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
  5. SpringBoot—JPA和JDBC常用配置说明
  6. 高可用—Keepalived安装部署使用详解
  7. MySQL—修改数据库root用户密码
  8. 判断字符串是否由纯数字组成
  9. 动态数组的各种操作 0104 c#
  10. python类属性的应用 子类继承可以节约空间