MySQL整合Spring时Spring JDBC怎么用

来源:站长平台作者:会飞的猪头衔:草根站长
导读:本期聚焦于小伙伴创作的《MySQL整合Spring时Spring JDBC怎么用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL整合Spring时Spring JDBC怎么用》有用,将其分享出去将是对创作者最好的鼓励。

MySQL整合Spring时,Spring JDBC是简化数据库操作的核心组件,它封装了原生JDBC的冗余操作,让开发者可以更专注于业务逻辑的实现,不需要手动处理连接的创建、释放以及异常捕获等繁琐工作。

MySQL整合Spring时Spring JDBC怎么用

环境准备

首先需要在项目中引入相关的依赖,如果使用Maven构建项目,需要在pom.xml中添加以下依赖:

<dependencies>
    <!-- Spring核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.30</version>
    </dependency>
    <!-- Spring JDBC依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.30</version>
    </dependency>
    <!-- MySQL驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

核心配置

配置数据源

Spring JDBC需要依赖DataSource来获取数据库连接,这里使用Spring自带的内置数据源作为示例,在Spring的配置文件中添加数据源配置:

<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>

配置JdbcTemplate

JdbcTemplate是Spring JDBC的核心操作类,它提供了丰富的数据库操作方法,需要将数据源注入到JdbcTemplate中:

<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

基础操作示例

创建实体类

首先创建一个对应的数据库实体类,假设数据库中有一张user表,字段包含id、username、age:

public class User {
    private Integer id;
    private String username;
    private Integer age;

    // 省略getter、setter方法
    // 省略toString方法
}

新增操作

使用JdbcTemplate的update方法执行新增操作,该方法支持传入SQL语句和对应的参数:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JdbcDemo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
        // 新增用户
        String sql = "insert into user(username, age) values(?, ?)";
        int rows = jdbcTemplate.update(sql, "张三", 25);
        System.out.println("新增影响行数:" + rows);
    }
}

查询操作

查询单条数据可以使用queryForObject方法,需要传入RowMapper来映射结果集到实体类:

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;

public class JdbcQueryDemo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
        // 查询单条数据
        String singleSql = "select * from user where id = ?";
        User user = jdbcTemplate.queryForObject(singleSql, new BeanPropertyRowMapper<>(User.class), 1);
        System.out.println("单条用户数据:" + user);
        // 查询多条数据
        String listSql = "select * from user";
        List<User> userList = jdbcTemplate.query(listSql, new BeanPropertyRowMapper<>(User.class));
        System.out.println("用户列表:" + userList);
    }
}

修改和删除操作

修改和删除操作同样使用update方法,只需要传入对应的SQL和参数即可:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JdbcUpdateDeleteDemo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
        // 修改操作
        String updateSql = "update user set age = ? where id = ?";
        int updateRows = jdbcTemplate.update(updateSql, 26, 1);
        System.out.println("修改影响行数:" + updateRows);
        // 删除操作
        String deleteSql = "delete from user where id = ?";
        int deleteRows = jdbcTemplate.update(deleteSql, 1);
        System.out.println("删除影响行数:" + deleteRows);
    }
}

事务管理配置

Spring JDBC支持声明式事务管理,只需要在配置文件中添加事务管理器和事务注解驱动即可:

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

之后在需要事务管理的方法上添加@Transactional注解即可,如果方法执行过程中抛出异常,事务会自动回滚:

import org.springframework.transaction.annotation.Transactional;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public void batchAddUser() {
        String sql = "insert into user(username, age) values(?, ?)";
        jdbcTemplate.update(sql, "李四", 22);
        // 模拟异常,触发事务回滚
        int i = 1 / 0;
        jdbcTemplate.update(sql, "王五", 23);
    }
}

注意事项

  • MySQL的url中需要指定时区参数,否则可能会出现连接异常
  • 使用BeanPropertyRowMapper时,实体类的属性名需要和数据库字段名一致,或者遵循驼峰命名映射规则
  • 如果项目中需要更强大的数据源,可以替换内置数据源为Druid、HikariCP等第三方数据源,配置方式类似
  • 事务管理默认只对运行时异常进行回滚,如果需要回滚其他类型的异常,可以在@Transactional注解中指定rollbackFor属性

Spring_JDBCMySQLDataSourceJdbcTemplate事务管理修改时间:2026-07-11 07:48:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。