Spring Boot 教程

集成 JDBC

本章节将介绍 Spring Boot 怎样集成 JDBC。这里的 JDBC 指的是 JdbcTemplate。

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

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

JdbcTemplate 主要提供以下五类方法:

  • execute:用于执行任何 SQL 语句,一般用于执行 DDL 语句;

  • update:用于执行新增、修改、删除等语句;

  • batchUpdate:用于执行批处理相关语句;

  • query 和 queryForXXX:用于执行查询相关语句;

  • call:用于执行存储过程、函数相关语句;

添加 POM 依赖

<!-- JDBC依赖(JDBCTemplate) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- MySQL JDBC Driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>

数据库准备

本教程将采用 MySQL 作为测试数据库,在 MySQL 中创建 test 数据库,然后创建一个 user 表。表结构 SQL 语句如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入测试数据
INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (1, '张三', '男', 27);
INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (2, '李思', '女', 25);
INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (3, '赵六', '男', 28);

示例代码

1)添加数据库配置信息,如:数据库URL、driverclass、用户名、密码等。如下:

# datasource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=aaaaaa

(2)定义 user 表对应的实体 UserEntity,代码如下:

public class UserEntity {
    private long id;
    private String name;
    private int age;
    private String sex;
    // 忽略 getter 和 setter
}

(3)编写 service 类,在该类中注入 JdbcTemplate,然后使用 JdbcTemplate 实现数据库查询。代码如下:

import com.hxstrive.springboot.jdbc.demo.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

@Service
public class UserService {
    // 注入 JdbcTemplate 实例
    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 查询所有用户信息
    public List<UserEntity> findAll() {
        final String sql = "SELECT `id`, `name`, `age`, `sex` FROM user";
        return jdbcTemplate.query(sql, new RowMapper<UserEntity>() {
            // 自定义的行处理器
            @Override
            public UserEntity mapRow(ResultSet resultSet, int i) throws SQLException {
                UserEntity userDomain = new UserEntity();
                userDomain.setId(resultSet.getInt("id"));
                userDomain.setName(resultSet.getString("name"));
                userDomain.setAge(resultSet.getInt("age"));
                userDomain.setSex(resultSet.getString("sex"));
                return userDomain;
            }
        });
    }

}

(4)客户端代码,使用 @SpringBootTest 和 @Test 注解实现 Spring Boot 单元测试,测试自定义服务。代码如下:

import com.hxstrive.springboot.jdbc.demo.entity.UserEntity;
import com.hxstrive.springboot.jdbc.demo.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        List<UserEntity> userEntities = userService.findAll();
        for(UserEntity userEntity : userEntities) {
            System.out.println(userEntity);
        }
    }
}

到这里,Spring Boot 集成 JDBC 就完成了。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号