【Spring Boot】Java 的数据库连接模板:JDBCTemplate

1.JDBCTemplate 初识

1.1 JDBC

在学习使用 JDBCTemplate 之前,我们先来了解一下 JDBC(Java DataBase Connectivity)。它是 Java 用于连接数据库的规范,也就是用于执行数据库 SQL 语句的 Java API。从 JDBC 的名称上看,它似乎没有指定某种数据库。可以猜想它可以为多种数据库提供统一访问的接口,这更合程序设计的模式。实际上,它由一组用 Java 语言编写的类和接口组成,为大部分 关系型数据库 提供访问接口。

JDBC 需要每次进行数据库连接,然后处理 SQL 语句、传值、关闭数据库。如果都由开发员编写代码,则很容易出错,可能会出现使用完成之后,数据库连接忘记关闭的情况。这容易导致连接被占用而降低性能,为了减少这种可能的错误,减少开发人员的工作量,JDBCtemplate 就被设计出来了。

1.2 JDBCTemplate

JDBCTemplate = JDBC + Template 的组合,是对 JDBC 的封装。它更便于程序实现,替我们完成所有的 JDBC 底层工作。因此,对于数据库的操作,不再需要每次都进行连接、打开、关闭了。现在通过 JDBCTemplate 不需要进行全局修改,就可以轻松地应对开发人员常常要面对的增加删除、修改和查询操作。

🚀 JDBC 和 JDBCTemplate 就像是仓库管理员,负责从仓库(数据库)中存取物品。而后者不需要 “每次进入都开门,取完关门”,因为有电动门自动控制。

2.JDBCTemplate 实现数据的增加、删除、修改和查询

2.1 配置基础依赖

要使用 JDBCTemplate,则需要添加其 Starter 依赖。因为要操作数据库,所以也需要配置数据库(以 MySQL为例)的连接依赖,见以下代码:

<!-- JDBCTemplate 依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MySQL 数据库依赖 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

添加完依赖后,还需要配置数据库的连接信息。这样 JDBCTemplate 才能正常连接到数据库在 application.properties 配置文件中配置数据库的地址和用户信息,见以下代码:

spring.datasource.url=jdbc:mysql://127.0.0.1/book?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

2.2 新建实体类

新建一个测试实体类 User,实现 RowMapper 类,重写 mapRow 方法,以便实体字段和数据表字段映射(对应)。映射是指把 Java 中设置的实体字段和 MySQL 数据库的字段对应起来,因为实体的 id 可以对应数据库字段的 u_id,也可以对应 idname 等。如果不重写,则程序不知道何对应。具体代码如下:

package com.example.demo.model;

import lombok.Data;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

@Data
public class User implements RowMapper<User> {
    private int id;
    private String username;
    private String password;

    // 必须重写mapRow方法
    @Override
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        User user = new User();
        user.setId(resultSet.getInt("id"));
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        return user;
    }
}

2.3 操作数据

JDBCTemplate 提供了以下操作数据的 3 个方法。

  • execute:表示 执行,用于直接执行 SQL 语句。
  • update:表示 更新,包括新增、修改、删除操作。
  • query:表示 查询

2.3.1 创建数据表

在使用 JDBCTemplate 之前,需要在控制器中注入 JDBCTemplate,然后就可以通过 execute 方法执行 SQL操作了,见以下代码:

@SpringBootTest
@RunWith(SpringRunner.class)
public class UserControllerTest {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Test
    /**
    * @Description: 创建表
    */
    public void createUserTable() throws Exception {
        String sql = "CREATE TABLE `user` (\n" +
                "  `id` int(10) NOT NULL AUTO_INCREMENT,\n" +
                "  `username` varchar(100) DEFAULT NULL,\n" +
                "  `password` varchar(100) DEFAULT NULL,\n" +
                "  PRIMARY KEY (`id`)\n" +
                ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;\n" +
                "\n";

        jdbcTemplate.execute(sql);
    }
}

在这里插入图片描述

2.3.2 添加数据

添加数据可以通过 update 方法来执行,见以下代码:

@Test
public void saveUserTest() throws Exception {
    String sql = "INSERT INTO user (USERNAME,PASSWORD) VALUES ('pipi','666666')";
    int rows = jdbcTemplate.update(sql);
    System.out.println(rows);
}

在这里插入图片描述

2.3.3 查询数据

以下代码是根据 name 查询单个记录,执行下面 sql 字符串里的 SQL 语句(SELECT * FROM user WHERE USERNAME = ?)。这里需要通过 query 方法来执行。

@Test
public void getUserByName() throws Exception {
    String name = "pipi";
    String sql = "SELECT * FROM user WHERE USERNAME = ?";
    List<User> list = jdbcTemplate.query(sql, new User(), new Object[]{name});
    for (User user : list) {
        System.out.println(user);
    }
}

运行测试,会在控制台输出如下结果:

在这里插入图片描述

2.3.4 查询所有记录

查询所有记录和查询单个记录一样,也是执行 query 方法。区别是,SQL 语句使用查询通配符 *,见以下代码:

@Test
public void list() throws Exception {
    String sql = "SELECT * FROM user";
    List<User> userList = jdbcTemplate.query(sql,
            new BeanPropertyRowMapper(User.class));
    for (User userLists : userList) {
        System.out.println(userLists);
    }
}

2.3.5 修改数据

要进行数据的修改,可以使用 update 方法来实现,见以下代码:

@Test
public void updateUserPassword() throws Exception {
    Integer id = 1;
    String passWord = "999888";
    String sql = "UPDATE user SET PASSWORD = ? WHERE ID = ?";
    int rows = jdbcTemplate.update(sql, passWord, id);
    System.out.println(rows);
}

在这里插入图片描述

2.3.6 删除数据

这里删除数据并不用 DELETE 方法,而是通过 update 方法来执行 SQL 语句中的 DELETE 方法。

@Test
public void deleteUserById() throws Exception {
    String sql = "DELETE FROM  user  WHERE ID = ?";
    int rows = jdbcTemplate.update(sql, 1);
    System.out.println(rows);
}

在这里插入图片描述

至此,已经实现了简单的 增加删除修改查询 功能。如果读者对关系型数据库的 SQL 不陌生,那么实现起来会非常简单。因为 JDBCTemplate 实现起来比 ORM 烦琐,所以大都分发人员使用的是 ORM(JPA 和 MyBatis)。但是 JDBCTemplate 依然有市场,因为学习成本低,会一些 SQL语句就能上手使用,操作虽然麻烦,但很容易学会。

3.认识 ORM

ORM(Object Relation Mapping)是 对象/关系映射。它提供了概念性的、易于理解的数据模型,将数据库中的表和内存中的对象建立映射关系。它是随着面向对象的软件开发方法的发展而产生的,面向对象的开发方法依然是当前主流的开发方法。

对象关系型数据业务实体 的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系型数据。内存中的对象不会被永久保存,只有关系型数据库(或 NoSQL 数据库,或文件)中的对象会被永久保存。

对象/关系映射(ORM)系统一般以中间件的形式存在,因为内存中的对象之间存在关联和继承关系,而在数据库中,关系型数据无法直接表达多对多的关联和继承关系。对象、数据库通过 ORM 映射的关系如下图所示。
在这里插入图片描述
目前比较常用的 ORM 是国外非常流行的 JPA 和国内非常流行的 MyBatis。

  • 20
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Spring Boot中,可以使用JdbcTemplate来获取数据库连接JdbcTemplateSpring Framework提供的一个用于简化数据库操作的类,它封装了JDBC API,可以方便地执行SQL查询和更新。 要使用JdbcTemplate获取所有数据库连接,首先需要在Spring Boot应用的配置文件中配置数据库连接信息,包括数据库的URL、用户名和密码。配置完成后,在需要获取数据库连接的地方,可以通过创建JdbcTemplate对象来获取连接。 具体步骤如下: 1. 在配置文件(如application.properties)中配置数据库连接信息,例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=123456 ``` 2. 在需要获取数据库连接的类中,使用@Autowired注解注入JdbcTemplate对象,例如: ```java @Autowired private JdbcTemplate jdbcTemplate; ``` 3. 在代码中,可以通过调用jdbcTemplate的getDataSource()方法来获取DataSource对象,进而获取数据库连接。例如: ```java DataSource dataSource = jdbcTemplate.getDataSource(); ``` 注意,这里返回的DataSource对象可以进行强制类型转换,以获取具体的数据库连接对象。 通过以上步骤,就可以在Spring Boot应用中使用JdbcTemplate来获取所有数据库连接了。可以根据具体的业务需求,进行查询、更新等操作。 ### 回答2: 在Spring Boot中,要获取所有数据库连接,可以使用JdbcTemplate来实现。JdbcTemplateSpring提供的一个模板类,用于简化数据库操作。下面是使用JdbcTemplate获取所有数据库连接的详细步骤: 1. 在Spring Boot的配置文件(application.properties或application.yml)中配置数据库连接信息,包括数据库的URL、用户名、密码等。 2. 在项目中引入spring-boot-starter-jdbc依赖,以便使用JdbcTemplate。 3. 创建一个DatabaseController类,并在其中注入一个JdbcTemplate的实例。 ```java @RestController public class DatabaseController { @Autowired private JdbcTemplate jdbcTemplate; @GetMapping("/databases") public List<String> getDatabases() { // 使用JdbcTemplate的query方法,执行SQL查询语句获取数据库连接信息 String query = "SELECT datname FROM pg_database WHERE datistemplate = false;"; List<String> databases = jdbcTemplate.queryForList(query, String.class); return databases; } } ``` 4. 在上述代码中,我们使用了一个GET请求的接口“/databases”,当调用这个接口时,会执行SQL查询语句获取数据库连接信息。 5. 在上述代码中,我们执行了一个查询pg_database的SQL语句,查询结果中包括了所有非模板数据库的名称。 6. 最后,将获取到的数据库连接信息返回给调用方。 通过以上步骤,我们就可以在Spring Boot中获取到所有数据库连接了。需要注意的是,以上代码中的查询语句是基于PostgreSQL数据库的,如果使用的是其他数据库,查询语句可能需要做相应的修改。 ### 回答3: 在Spring Boot中,获取所有数据库连接需要引入相应的依赖和进行一些配置。以下是具体的步骤: 1. 在pom.xml文件中添加数据库连接池的依赖,例如HikariCP: ```xml <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> ``` 2. 在application.properties或application.yml中进行数据库连接的配置。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 创建一个数据库连接的类,使用@Configuration注解进行配置。在这个类中,我们可以使用@Autowired注解将DataSource自动注入。 ```java @Configuration public class DatabaseConfiguration { @Autowired private DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } } ``` 4. 在需要获取数据库连接的地方,使用@Autowired注解将JdbcTemplate自动注入,并使用其getDataSource()方法获取DataSource对象。 ```java @Autowired private JdbcTemplate jdbcTemplate; public void getAllConnections() { DataSource dataSource = jdbcTemplate.getDataSource(); // 进一步操作数据库连接 } ``` 通过以上步骤,我们就可以使用Spring Boot获取所有数据库连接了。可以通过配置文件中的数据库信息来访问数据库,并且可以使用JdbcTemplate来执行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值