📜  Spring JDBC 示例(1)

📅  最后修改于: 2023-12-03 15:20:13.170000             🧑  作者: Mango

Spring JDBC 示例

Spring JDBC 为使用 JDBC 提供了更加简化且颗粒度更细的操作,同时还支持基于数据库的事务处理。

准备

在开始之前,需要确认已经完成以下准备工作:

  • 安装并配置好 JDK 环境
  • 在项目中引入 Spring JDBC 的依赖
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.9</version>
</dependency>
数据库连接

Spring JDBC 支持各种数据源,例如连接池、驱动程序管理的连接和 JNDI。

数据源配置

在 Spring 配置文件中配置数据源,示例使用 HikariCP 连接池:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
    <property name="maximumPoolSize" value="10"/>
    <property name="idleTimeout" value="30000"/>
</bean>
JdbcTemplate

Spring 的核心组件 JdbcTemplate 是 JDBC API 的抽象层之一,可以极大地简化 JDBC 代码。

在使用 JdbcTemplate 之前,需要将数据源注入 JdbcTemplate 中:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>
CRUD 操作
查询操作

使用 JdbcTemplate 进行查询操作:

public List<User> findAllUsers() {
    return jdbcTemplate.query("SELECT * FROM users", new 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.setAge(rs.getInt("age"));
            return user;
        }
    });
}

此处使用了 RowMapper 接口实现了自定义的对象映射。

插入操作

使用 JdbcTemplate 进行插入操作:

public int addUser(User user) {
    return jdbcTemplate.update("INSERT INTO users(name, age) VALUES(?, ?)",
            user.getName(), user.getAge());
}
更新操作

使用 JdbcTemplate 进行更新操作:

public int updateUser(User user) {
    return jdbcTemplate.update("UPDATE users SET name = ?, age = ? WHERE id = ?",
            user.getName(), user.getAge(), user.getId());
}
删除操作

使用 JdbcTemplate 进行删除操作:

public int deleteUser(Long id) {
    return jdbcTemplate.update("DELETE FROM users WHERE id = ?", id);
}
事务管理

Spring 的事务管理是透明的,即数据访问层不需要专门处理事务。

开启事务

在 Spring 配置文件中配置事务管理器:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
执行事务

在 Service 层方法上使用 @Transactional 注解即可执行事务:

@Transactional
public void batchUpdate(List<User> users) {
    for (User user : users) {
        jdbcTemplate.update("UPDATE users SET name = ?, age = ? WHERE id = ?",
                user.getName(), user.getAge(), user.getId());
    }
}
总结

Spring JDBC 简化了 JDBC 的操作,提升了开发效率和代码质量。同时,Spring 的事务管理也为数据访问提供了很好的支持。