使用 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之力

相关推荐
华子w9089258595 分钟前
基于 SpringBoot+Vue.js+ElementUI 的 “花开富贵“ 花园管理系统设计与实现7000字论文
vue.js·spring boot·elementui
码不停蹄的玄黓9 分钟前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_18 分钟前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)29 分钟前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo38 分钟前
Linux系统之MySQL数据库基础
linux·数据库·mysql
小时候的阳光39 分钟前
SpringBoot3 spring.factories 自动配置功能不生效?
spring boot·spring·失效·factories·imports
博观而约取43 分钟前
Django ORM 1. 创建模型(Model)
数据库·python·django
Tangcan-43 分钟前
【MySQL】 内置函数
mysql
大只鹅1 小时前
Springboot3整合ehcache3缓存--XML配置和编程式配置
spring boot·缓存
找不到、了2 小时前
MySQL的窗口函数介绍
数据库·mysql