【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门

JdbcTemplate入门

本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate,然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。

1.JdbcTemplate简介

1.1 什么是JDBC

JDBC(Java Data Base Connectivity,Java数据库连接)是Java语言中用来规范应用程序如何访问数据库的API,为多种关系数据库提供统一访问方式,诸如查询和更新数据库中数据的方法。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

1.2 什么是JdbcTemplate

JDBC作为Java访问数据库的API规范,统一了各种数据库的访问方式,但是直接在Java程序中使用JDBC还是非常复杂和烦琐的,所以Spring对JDBC进行了更深层次的封装,而JdbcTemplate就是Spring提供的操作数据库的便捷工具。它主要实现数据库连接的管理,我们可以借助JdbcTemplate来执行所有数据库操作,例如查询、插入、更新、删除等操作,并且有效地避免了直接使用JDBC带来的烦琐编码。

Spring Boot作为Spring的集大成者,自然会将JdbcTemplate集成进去。Spring Boot针对JDBC的使用提供了对应的Starter:spring-boot-starter-jdbc,它其实就是在Spring JDBC上做进一步的封装,方便在Spring Boot项目中更好地使用JDBC。

1.3 JdbcTemplate的特点

速度快,相对于ORM框架,JDBC的方式是最快的。

配置简单,Spring封装的除了数据库连接之外,几乎没有额外的配置。

使用方便,它更像DBUtils工具类,只需注入JdbcTemplate对象即可。

1.4 JdbcTemplate的几种类型的方法

JdbcTemplate虽然简单,但是功能非常强大,它提供了非常丰富、实用的方法,归纳起来主要有以下几种类型的方法:

1)execute()方法:可以用于执行任何SQL语句,一般用于执行DDL语句。

2)update()、batchUpdate()方法:用于执行新增、修改与删除等语句。

3)query()和queryForXXX()方法:用于执行查询相关的语句。

4)call()方法:用于执行数据库存储过程和函数相关的语句。

总的来说,新增、删除与修改3种类型的操作主要使用update()和batchUpdate()方法来完成。query()和queryForObject()方法主要用来完成查询功能。execute()方法可以用来创建、修改、删除数据库表。call()方法则用来调用存储过程。

在大部分情况下,我们都会使用更加强大的持久化框架来访问数据库,比如MyBatis、Hibernate或者Spring Data JPA。之所以介绍JdbcTemplate这种基础的数据库框架,只是希望读者能从基础开始学习,只有掌握了这些基础的框架才能更好地学习其他复杂的。

2.Spring Boot集成JdbcTemplate

Spring Boot集成JDBC很简单,只需要引入依赖并进行基础配置即可。接下来以一个具体的例子来学习如何利用Spring的JdbcTemplate进行数据库操作。

步骤01 添加依赖配置。

在pom.xml配置文件中增加JDBC等相关依赖:

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

在上面的示例中,在pom.xml文件中引入spring-boot-starterjdbc依赖。同时,由于项目中使用MySQL作为数据库,因此项目中需要引入MySQL驱动包。spring-boot-starter-jdbc直接依赖于HikariCP和spring-jdbc。

  • HikariCP是Spring Boot 2.0默认使用的数据库连接池,也是传说中最快的数据库连接池。
  • spring-jdbc是Spring框架对JDBC的简单封装,提供了一个简化JDBC操作的开发工具包。

步骤02 创建数据库及表结构。

首先创建jdbctest测试数据库,然后创建student表,包括id、name、sex、age等字段,对应的SQL脚本如下:

python 复制代码
DROP TABLE IF EXISTS 'student';
CREATE TABLE 'student' (
			'id' bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
			'name' varchar(32) DEFAULT NULL COMMENT '姓名',
			'sex' int DEFAULT NULL,
			'age' int DEFAULT NULL,
			PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;;

步骤03 配置数据源。

在application.properties中配置MySQL数据库连接相关内容。具体配置如下:

python 复制代码
spring.datasource.url=jdbc:mysql://Localhost:3306/jdbctest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

在上面的示例中,数据库连接配置非常简单,包括数据库连接地址、用户名、密码以及数据驱动,无须其他额外配置。在Spring Boot 2.0中,com.mysql.jdbc.Driver已经过期,推荐使用com.mysql.cj.jdbc.Driver。

步骤04 使用JdbcTemplate。

上面已经把JdbcTemplate集成到Spring Boot项目中,并创建了数据。接下来创建一个单元测试类JdbcTests,验证JdbcTemplate操作数据库。示例代码如下:

python 复制代码
@RunWith(SpringRunner.class)
    @SpringBootTest
    class JdbcTests {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Test
    void querytest() throws SOLException {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from student");
        System.out.println(list.size());
        Assert.assertNotNull(list);
        Assert.assertEquals(1,list.size());
    }
}

上面是简单地使用JdbcTemplate的测试示例,Spring的JdbcTemplate是自动配置的。使用@Autowired将JdbcTemplate注入需要的Bean中即可直接调用。

运行成功,JdbcTemplate已经连接上数据库,并成功执行了数据查询操作。以上就把JdbcTemplate集成到Spring Boot项目中了。

相关推荐
云和数据.ChenGuang5 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi5 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据6 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi7 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
独行soc7 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天8 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
工业甲酰苯胺8 小时前
分布式系统架构:服务容错
数据库·架构