Spring Boot 底层针对于MySQL 、Oracle 等数据库都提供了良好的支持,通过 Spring Boot 提供的场景启动器就能够看出来。

Java 程序在进行与 MySQL 的连接时需要通过 JDBC 来实现,JDBC 全称为 Java Data Base Connectivity(Java 数据库连接),主要由接口组成,是一种用于执行 SQL 语句的 Java API,各个数据库厂家基于它各自实现了自己的驱动程序(Driver),如下图所示:

Java程序在获取数据库连接时,需要以URL方式指定不同类型数据库的Driver,在获得特定的Connection连接后,可按照JDBC规范对不同类型的数据库进行数据操作,代码如下所示:

// 第一步,注册驱动程序
Class.forName("数据库驱动的完整类名");
// 第二步,获取一个数据库的连接
Connection conn = DriverManager.getConnection("数据库地址","用户名","密码");
// 第三步,创建一个会话
Statement stmt=conn.createStatement();
// 第四步,执行SQL语句
stmt.executeUpdate("SQL 语句");
// 或者查询记录
ResultSet rs = stmt.executeQuery("查询记录的SQL语句");
// 第五步,对查询的结果进行处理
while(rs.next()){
// 操作
}
// 第六步,关闭连接
rs.close();
stmt.close();
conn.close();

上面几行代码读者并不陌生,这是在初学JDBC连接时的代码。虽然现在可能用了一些数据层ORM框架(比如MyBatis或者Hibernate ),但是底层实现依然和这里的代码一样。通过使用JDBC,开发人员可以直接使用Java程序来对关系型数据库进行操作。接下来将对Spring Boot如何使用JDBC进行实例演示。

1.首先,需要在项目中引入相应的场景启动器,也就是引入依赖的jar包,添加的内容如下所示:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

在添加完相关依赖之后,需要启动MySQL数据库并在新建的Spring Boot项目中配置数据库连接的地址和账号密码,这样才能正确连接到数据库。在application.properties配置文件中添加如下配置代码:

spring.datasource.name=newbee-mall-datasource
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&serverTimezone=GMT&characterEncoding=utf8&autoReconnect=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

Spring Boot 操作数据库实践

Spring Boot 默认没有集成相关的 ORM 框架,而是提供了 JdbcTemplate 对象来简化开发者对于数据库的操作。

JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使 JDBC 更加易于使用,更为关键的一点是,JdbcTemplate 对象也是通过自动配置机制注册到 IOC 容器中的,JdbcTemplate 的自动配置类是 JdbcTemplateAutoConfiguration。在 DataSourceAutoConfiguration 自动配置之后,会使用 IOC 容器中的 dataSource 对象作为构造参数创建一个 JdbcTemplate 对象并注册到 IOC 容器中。

在正确配置数据源之后,开发者们可以直接在代码中使用 JdbcTemplate 对象进行数据库操作。

使用 JdbcTemplate 进行数据库的增删改查

接下来进行编码操作来完成使用 JdbcTemplate 进行数据库的增删改查操作。

首先在数据库中创建一张测试表,建表语句如下:

DROP TABLE IF EXISTS `jdbc_test`;

CREATE TABLE `jdbc_test` (

`ds_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',

`ds_type` varchar(100) DEFAULT NULL COMMENT '数据源类型',

`ds_name` varchar(100) DEFAULT NULL COMMENT '数据源名称',

PRIMARY KEY (`ds_id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8;

/*Data for the table `jdbc_test` */

insert into `jdbc_test`(`ds_id`,`ds_type`,`ds_name`) values (1,'com.zaxxer.hikari.HikariDataSource','hikari数据源'),(2,'org.apache.commons.dbcp2.BasicDataSource','dbcp2数据源');

为了演示方便,在 controller 包中新建 JdbcController 类直接注入 JdbcTemplate 对象。之后创建四个方法,分别实现根据传入的参数向 jdbc_test 表中新增数据、修改 jdbc_test 表中的数据、删除 jdbc_test 表中的数据、查询jdbc_test 表中的数据,实现代码如下:

package ltd.newbee.mall.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.util.CollectionUtils;

import org.springframework.util.StringUtils;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

import java.util.Map;

@RestController

public class JdbcController {

//已经自动配置,因此可以直接通过 @Autowired 注入进来
@Autowired
JdbcTemplate jdbcTemplate;


// 新增一条记录
@GetMapping("/insert")
public String insert(String type, String name) {
    if (StringUtils.isEmpty(type) || StringUtils.isEmpty(name)) {
        return "参数异常";
    }
    jdbcTemplate.execute("insert into jdbc_test(`ds_type`,`ds_name`) value (\"" + type + "\",\"" + name + "\")");
    return "SQL执行完毕";
}


// 删除一条记录
@GetMapping("/delete")
public String delete(int id) {
    if (id < 0) {
        return "参数异常";
    }
    List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from jdbc_test where ds_id = \"" + id + "\"");
    if (CollectionUtils.isEmpty(result)) {
        return "不存在该记录,删除失败";
    }
    jdbcTemplate.execute("delete from jdbc_test where ds_id=\"" + id + "\"");
    return "SQL执行完毕";
}


// 修改一条记录
@GetMapping("/update")
public String update(int id, String type, String name) {
    if (id < 0 || StringUtils.isEmpty(type) || StringUtils.isEmpty(name)) {
        return "参数异常";
    }
    List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from jdbc_test where ds_id = \"" + id + "\"");
    if (CollectionUtils.isEmpty(result)) {
        return "不存在该记录,无法修改";
    }
    jdbcTemplate.execute("update jdbc_test set ds_type=\"" + type + "\", ds_name= \"" + name + "\" where ds_id=\"" + id + "\"");
    return "SQL执行完毕";
}


// 查询所有记录
@GetMapping("/queryAll")
public List<Map<String, Object>> queryAll() {
    List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from jdbc_test");
    return list;
}

}

在 Spring Boot 项目中操作数据库,仅仅需要几行配置代码即可完成数据库的连接操作,并不需要多余的设置,再加上 Spring Boot 自动配置了 jdbcTemplate 对象,开发者可以直接上手进行数据库的相关开发工作。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐