> 文档中心 > Spring07 —— Spring JdbcTemplate的使用

Spring07 —— Spring JdbcTemplate的使用


往期文章

Spring01 —— Spring概念及快速入门
Spring02 —— Spring配置文件详解和依赖注入
Spring03 —— SpringAPI和在Spring中配置数据源
Spring04 —— Spring的注解开发
Spring05 —— Spring集成Junit
Spring06 —— Spring集成web环境
SpringMVC01 —— SpringMVC简介&快速入门
SpringMVC02 —— SpringMVC的各组件详解
SpringMVC03 —— Spring的请求和响应


本文目录

  • 往期文章
  • Spring JdbcTemplate
    • 1、Jdbctemplate简介
    • 2、Jdbctemplate的使用步骤
    • 3、jdbctemplate快速入门
    • 4、Spring生成模板对象jdbctemplate
    • 5、抽取jdbc.properties
    • 6、jdbctemplate常用操作
      • 6.1、更新操作
      • 6.2、新增操作
      • 6.3、删除操作
      • 6.4、查询
    • 7、知识小结

前言:
  我们已经知道了 Spring提供的web框架是SpringMVC,业务层有Spring,那么对于数据库的操作Spring也提供了 Spring JDBC模块帮助我们进行简洁开发。
  总所周知jdbc是一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这个结构然后提供相应驱动jar包。但在实际的企业级应用开发中,我们很少直接使用原生的 JDBC API 进行开发,这是因为使用 JDBC API 对数据库进行操作十分繁琐,需要我们对每一步都做到“步步把控,处处关心”,例如我们需要手动控制数据库连接的开启,异常处理、事务处理、最后还要手动关闭连接释放资源等等。所以Spring就帮我们封装了原始的jdbc操作,提供一个Spring JDBC模块使得开发者使用起来更加简单。

Spring JdbcTemplate

1、Jdbctemplate简介

JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等

开发者只需要关注一些必要的参数,无需过度关注驱动的加载,数据库连接的开启与关闭、SQL 语句的创建与执行、异常处理以及事务处理等繁杂乏味的工作。

JdbcTemplate 是 Spring JDBC 核心包(core)中的核心类,它可以通过配置文件、注解、Java 配置类等形式获取数据库的相关信息,实现了对 JDBC 开发过程中的驱动加载、连接的开启和关闭、SQL 语句的创建与执行、异常处理、事务处理、数据类型转换等操作的封装。我们只要对其传入SQL 语句和必要的参数即可轻松进行 JDBC 编程。

JdbcTemplate 的全限定命名为 org.springframework.jdbc.core.JdbcTemplate

2、Jdbctemplate的使用步骤

①导入spring-jdbc和spring-tx坐标

②创建数据库表和实体

③创建JdbcTemplate对象

④执行数据库操作

3、jdbctemplate快速入门

【1】导入依赖坐标

<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.zhou</groupId>    <artifactId>spring_jdbcTemplete</artifactId>    <version>1.0-SNAPSHOT</version>    <dependencies>  <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-context</artifactId>     <version>5.0.5.RELEASE</version> </dependency>  <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-test</artifactId>     <version>5.0.5.RELEASE</version> </dependency>  <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-web</artifactId>     <version>5.0.5.RELEASE</version> </dependency>  <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>     <version>5.0.5.RELEASE</version> </dependency>  <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-jdbc</artifactId>     <version>5.0.5.RELEASE</version> </dependency> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-tx</artifactId>     <version>5.0.5.RELEASE</version> </dependency>  <dependency>     <groupId>junit</groupId>     <artifactId>junit</artifactId>     <version>4.12</version>     <scope>test</scope> </dependency>  <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>5.1.37</version> </dependency>  <dependency>     <groupId>c3p0</groupId>     <artifactId>c3p0</artifactId>     <version>0.9.1.2</version> </dependency>  <dependency>     <groupId>com.alibaba</groupId>     <artifactId>druid</artifactId>     <version>1.1.10</version> </dependency>  <dependency>     <groupId>javax.servlet</groupId>     <artifactId>servlet-api</artifactId>     <version>2.5</version>     <scope>provided</scope> </dependency>  <dependency>     <groupId>javax.servlet.jsp</groupId>     <artifactId>jsp-api</artifactId>     <version>2.0</version>     <scope>provided</scope> </dependency>  <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-core</artifactId>     <version>2.9.0</version> </dependency> <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId>     <version>2.9.0</version> </dependency> <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-annotations</artifactId>     <version>2.9.0</version> </dependency>  <dependency>     <groupId>commons-fileupload</groupId>     <artifactId>commons-fileupload</artifactId>     <version>1.3.1</version> </dependency> <dependency>     <groupId>commons-io</groupId>     <artifactId>commons-io</artifactId>     <version>2.3</version> </dependency>    </dependencies></project>

【2】准备数据库环境

CREATE TABLE IF NOT EXISTS products(id INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20),price DOUBLE);SELECT * FROM products;INSERT INTO  products VALUES(NULL,'苹果',20);INSERT INTO  products VALUES(NULL,'香蕉',8)INSERT INTO  products VALUES(NULL,'栗子',14);INSERT INTO  products VALUES(NULL,'猕猴桃',10);INSERT INTO  products VALUES(NULL,'草莓',22);

在这里插入图片描述

【3】编码

public class JdbcTemplateTest {    @Test    public void test1() throws PropertyVetoException { // 创建数据源 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/study"); dataSource.setUser("root"); dataSource.setPassword("123456"); // 创建jdbc模板对象 需要设置数据源信息 JdbcTemplate template = new JdbcTemplate(dataSource); // 定义sql String sql = "INSERT INTO  products VALUES(NULL,'菠萝',12)"; // 执行sql int i = template.update(sql); System.out.println(i);    }}

【4】测试

在这里插入图片描述

4、Spring生成模板对象jdbctemplate

我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,然后通过Spring容器获得JdbcTemplate对象来执行操作。

在spring核心配置文件applicationContext.xml文件中配置:

<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.xsd">        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/study"/> <property name="user" value="root"/> <property name="password" value="123456"/>    </bean>        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/>    </bean></beans>

测试:

  @Test    public void test2(){ // 通过spring容器获取jdbctemplate ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); JdbcTemplate template = app.getBean("jdbcTemplate", JdbcTemplate.class); // 定义sql String sql = "select * from products"; // 执行sql List<Product> productList = template.query(sql, new BeanPropertyRowMapper<Product>(Product.class)); for (Product product : productList) {     System.out.println(product); }    }}

在这里插入图片描述

5、抽取jdbc.properties

将数据库的连接信息抽取到外面的配置文件中达到解耦和的目的,和Spring配置文件分离开,有利于后期维护。

在这里插入图片描述

在spring核心配置文件applicationContext.xml文件中引入

引入外部的配置文件需要context命名空间,所以要先引入context命名空间
在这里插入图片描述

6、jdbctemplate常用操作

jdbcTemplate的常用操作就是增删改查
其中增删改数据更新操作 使用update()方法
查询使用query方法,但是这里面有很多方法,query、queryForObject、queryForList等,这里不做详细描述。我们这里使用常用的两个方法,query queryForObject进行案例测试。

6.1、更新操作

使用Spring集成junit进行测试。回顾Spring集成junit的步骤

1、导入相关依赖

2、使用@RunWith改变运行期

3、使用@ContextConfiguration指定配置文件或配置类

4、使用@Autowired注入需要测试的对象

5、创建测试方法进行测试

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class JdbcTemplateTest2 {    @Resource(name = "jdbcTemplate")    private JdbcTemplate template;    // 更新操作    @Test    public void testUpdate(){ String sql = "update products set price=? where id=?"; int row = template.update(sql, 90, 1); // 修改id为1的价格为90 System.out.println(row);    }}

在这里插入图片描述

6.2、新增操作

// 新增@Testpublic void testInsert(){    String sql = "insert into products values(null,?,?)";    int row = template.update(sql, "哈密瓜", 30); // 新增一个水果种类    System.out.println(row);}

在这里插入图片描述

6.3、删除操作

// 删除@Testpublic void testDelete(){    String sql = "delete from products where id = ?";    int row = template.update(sql, 2); // 将id为2的删除    System.out.println(row);}

在这里插入图片描述

6.4、查询

// 查询@Testpublic void testSelect(){    String sql = "select * from products";    List<Product> products = template.query(sql, new BeanPropertyRowMapper<Product>(Product.class));    System.out.println(products);}

在这里插入图片描述

  // 查询    @Test    public void testSelect(){ String sql = "select count(id) from products"; Integer count = template.queryForObject(sql, Integer.class); System.out.println(count);    }

7、知识小结

jdbctemplate的使用步骤

①导入spring-jdbc和spring-tx坐标

②创建数据库表和实体

③创建JdbcTemplate对象

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

④编写sql

⑤执行sql

Spring07 —— Spring JdbcTemplate的使用 与50位技术专家面对面 Spring07 —— Spring JdbcTemplate的使用 20年技术见证,附赠技术全景图