Spring JDBC模板
Spring JDBC模板(JdbcTemplate)是Spring框架提供的一个简化JDBC操作的工具类。它封装了JDBC的常见操作,如查询、更新、插入和删除等,简化了数据库访问代码,减少了样板代码。下面是一个详细的示例,展示如何使用Spring JDBC模板进行数据库操作。
核心概念
- JdbcTemplate:Spring提供的一个工具类,用于简化JDBC操作。
- DataSource:数据源,用于获取数据库连接。
- 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 {@Beanpublic 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;}@Beanpublic 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 setterspublic 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> {@Overridepublic 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);}
}
详细解释
-
配置数据源和JdbcTemplate:
AppConfig
类使用@Configuration
注解定义为一个配置类。dataSource
方法配置了数据源,使用DriverManagerDataSource
连接到MySQL数据库。jdbcTemplate
方法创建了一个JdbcTemplate
实例,并注入了数据源。
-
定义实体类:
User
类是一个简单的Java类,包含id
、name
和email
属性,以及相应的getter和setter方法。
-
定义DAO类:
UserDao
类使用JdbcTemplate
进行数据库操作。addUser
方法插入一个新用户。getAllUsers
方法查询所有用户。getUserById
方法根据ID查询用户。updateUser
方法更新用户信息。deleteUser
方法删除用户。UserRowMapper
是一个内部类,实现了RowMapper
接口,用于将结果集的每一行映射到User
对象。
-
测试类:
Main
类通过AnnotationConfigApplicationContext
加载AppConfig
配置,并获取UserDao
的实例。- 演示了如何使用
UserDao
进行添加、查询、更新和删除用户的操作。
通过这种方式,Spring JDBC模板简化了JDBC操作,使代码更加简洁和易于维护。