自学内容网 自学内容网

Spring JDBC模板

Spring JDBC模板(JdbcTemplate)是Spring框架提供的一个简化JDBC操作的工具类。它封装了JDBC的常见操作,如查询、更新、插入和删除等,简化了数据库访问代码,减少了样板代码。下面是一个详细的示例,展示如何使用Spring JDBC模板进行数据库操作。

核心概念

  1. JdbcTemplate:Spring提供的一个工具类,用于简化JDBC操作。
  2. DataSource:数据源,用于获取数据库连接。
  3. RowMapper:用于将结果集的每一行映射到一个Java对象。

示例代码

1. 配置数据源和JdbcTemplate

首先,我们需要配置数据源和JdbcTemplate。可以使用Spring的Java配置类来完成。

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

@Configuration
public class AppConfig {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
2. 定义实体类

定义一个实体类,用于映射数据库表中的数据。

package com.example.model;

public class User {
    private int id;
    private String name;
    private String email;

    // Getters and setters
    public int getId() {
        return id;
    }

    public void setId(int 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. 定义DAO类

定义一个DAO类,使用JdbcTemplate进行数据库操作。

package com.example.dao;

import com.example.model.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

@Repository
public class UserDao {

    private final JdbcTemplate jdbcTemplate;

    public UserDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // 插入用户
    public void addUser(User user) {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getEmail());
    }

    // 查询所有用户
    public List<User> getAllUsers() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.query(sql, new UserRowMapper());
    }

    // 根据ID查询用户
    public User getUserById(int id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new UserRowMapper(), id);
    }

    // 更新用户
    public void updateUser(User user) {
        String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
        jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
    }

    // 删除用户
    public void deleteUser(int id) {
        String sql = "DELETE FROM users WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    // RowMapper实现类
    private static class UserRowMapper implements RowMapper<User> {
        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setEmail(rs.getString("email"));
            return user;
        }
    }
}
4. 测试类

定义一个测试类,演示如何使用UserDao进行数据库操作。

package com.example;

import com.example.config.AppConfig;
import com.example.dao.UserDao;
import com.example.model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserDao userDao = context.getBean(UserDao.class);

        // 添加用户
        User user = new User();
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        userDao.addUser(user);

        // 查询所有用户
        List<User> users = userDao.getAllUsers();
        for (User u : users) {
            System.out.println("User ID: " + u.getId() + ", Name: " + u.getName() + ", Email: " + u.getEmail());
        }

        // 根据ID查询用户
        User userById = userDao.getUserById(1);
        System.out.println("User ID: " + userById.getId() + ", Name: " + userById.getName() + ", Email: " + userById.getEmail());

        // 更新用户
        userById.setName("Jane Doe");
        userById.setEmail("jane.doe@example.com");
        userDao.updateUser(userById);

        // 删除用户
        userDao.deleteUser(1);
    }
}

详细解释

  1. 配置数据源和JdbcTemplate

    • AppConfig 类使用 @Configuration 注解定义为一个配置类。
    • dataSource 方法配置了数据源,使用 DriverManagerDataSource 连接到MySQL数据库。
    • jdbcTemplate 方法创建了一个 JdbcTemplate 实例,并注入了数据源。
  2. 定义实体类

    • User 类是一个简单的Java类,包含 idname 和 email 属性,以及相应的getter和setter方法。
  3. 定义DAO类

    • UserDao 类使用 JdbcTemplate 进行数据库操作。
    • addUser 方法插入一个新用户。
    • getAllUsers 方法查询所有用户。
    • getUserById 方法根据ID查询用户。
    • updateUser 方法更新用户信息。
    • deleteUser 方法删除用户。
    • UserRowMapper 是一个内部类,实现了 RowMapper 接口,用于将结果集的每一行映射到 User 对象。
  4. 测试类

    • Main 类通过 AnnotationConfigApplicationContext 加载 AppConfig 配置,并获取 UserDao 的实例。
    • 演示了如何使用 UserDao 进行添加、查询、更新和删除用户的操作。

通过这种方式,Spring JDBC模板简化了JDBC操作,使代码更加简洁和易于维护。


原文地址:https://blog.csdn.net/yuehua00/article/details/143588612

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!