使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在现代的 Java 应用开发中,Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类,用于简化 JDBC 操作,减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库,并通过类图展示关键类之间的关系。

1. 项目依赖配置

在 Spring Boot 3.3 项目中,使用 JdbcTemplate 操作 MySQL 数据库需要以下依赖:

spring-boot-starter-jdbc:提供 JdbcTemplate 和其他 JDBC 相关功能。

mysql-connector-j:MySQL 的 JDBC 驱动,用于连接 MySQL 数据库。

在 pom.xml 文件中添加以下依赖:

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

2. 数据库配置

复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 关键类及其关系

3.1 实体类(User)

实体类 User 对应数据库表 users。它包含字段 id、name 和 email,以及相应的 getter 和 setter 方法。

复制代码
public class User {
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3.2 DAO 类(UserDao)

DAO 类 UserDao 封装了与数据库表相关的操作。它注入了 JdbcTemplate 对象,并通过它执行 SQL 语句。

复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public User findUserById(Long id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
    }

    public List<User> findAllUsers() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.query(sql, new UserRowMapper());
    }

    public int insertUser(User user) {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
        return jdbcTemplate.update(sql, user.getName(), user.getEmail());
    }

    public int updateUser(User user) {
        String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
        return jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
    }

    public int deleteUser(Long id) {
        String sql = "DELETE FROM users WHERE id = ?";
        return jdbcTemplate.update(sql, id);
    }
}

3.3 RowMapper 接口

RowMapper 是一个接口,用于将 ResultSet 中的每一行数据映射为一个对象。UserRowMapper 是 RowMapper 的具体实现,用于将查询结果映射为 User 对象。

复制代码
import org.springframework.jdbc.core.RowMapper;

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

public class UserRowMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getLong("id"));
        user.setName(rs.getString("name"));
        user.setEmail(rs.getString("email"));
        return user;
    }
}

4. 注意事项

4.1 SQL 注入风险

确保使用参数化查询,避免直接拼接 SQL 语句,以防止 SQL 注入攻击。

4.2 异常处理

捕获并处理可能的 DataAccessException,这是 JdbcTemplate 抛出的异常。

4.3 资源管理

JdbcTemplate 会自动管理数据库连接,无需手动关闭 Connection、Statement 或 ResultSet。

4.4 性能优化

对于复杂的查询,可以考虑使用 PreparedStatement 或 PreparedStatementSetter 来提高性能。

5. 总结

本文介绍了如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 操作 MySQL 数据库。我们定义了实体类 User,创建了 DAO 类 UserDao,并使用 JdbcTemplate 执行数据库操作。通过 RowMapper 接口,我们将查询结果映射为 User 对象。最后,我们通过类图展示了关键类之间的关系。

希望本文对你有所帮助!如果有任何问题或建议,欢迎随时留言。

PS:以我之思,借AI之力

相关推荐
jiayou642 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
随风飘的云3 小时前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
洋洋技术笔记4 小时前
Spring Boot Web MVC配置详解
spring boot·后端
NineData14 小时前
NineData 迁移评估功能正式上线
数据库·dba
NineData19 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
初次攀爬者1 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840821 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解1 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
全栈老石1 天前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码