当前位置: 首页 > news >正文

Spring JDBC 的开发步骤(注解方式)

Spring JDBC 的开发步骤主要包括以下关键环节,结合代码示例说明如下:


1. 添加依赖

pom.xml 中引入 Spring JDBC 和数据库驱动依赖(以 HikariCP 连接池和 MySQL 为例):

<!-- Spring JDBC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version>
</dependency><!-- 数据库驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency><!-- 连接池(可选,推荐 HikariCP) -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency>

2. 配置数据源

通过 Java Config 配置数据源(推荐)或 XML。

Java Config 示例
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setMaximumPoolSize(10);return dataSource;}
}

3. 创建 JdbcTemplate 实例

DataSource 注入到 JdbcTemplate 中:

@Configuration
public class JdbcConfig {@Autowiredprivate DataSource dataSource;@Beanpublic JdbcTemplate jdbcTemplate() {return new JdbcTemplate(dataSource);}
}

4. 编写 DAO 层

使用 JdbcTemplate 执行 SQL 操作,常用方法包括:

  • update(): 执行增删改操作
  • query(): 查询数据(配合 RowMapperResultSetExtractor
  • queryForObject(): 查询单条记录
示例:UserDao
@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;// 插入用户public void insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 查询所有用户public List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}// 根据ID查询用户public User findUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));}
}

5. 异常处理

Spring JDBC 将 SQLException 转换为 DataAccessException,可通过 @ExceptionHandler 统一处理:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(DataAccessException.class)public ResponseEntity<String> handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(500).body("数据库操作失败: " + ex.getMessage());}
}

6. 事务管理(可选)

在 Service 层使用 @Transactional 管理事务:

@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactionalpublic void createUser(User user) {userDao.insertUser(user);// 其他数据库操作(事务会回滚)}
}

7. 测试 DAO 层

使用 Spring Test 进行单元测试:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DataSourceConfig.class, JdbcConfig.class})
public class UserDaoTest {@Autowiredprivate UserDao userDao;@Testpublic void testFindAllUsers() {List<User> users = userDao.findAllUsers();Assert.assertNotNull(users);}
}

补充说明

  • 简化配置(Spring Boot)
    在 Spring Boot 中,只需添加 spring-boot-starter-jdbc 依赖,自动配置 HikariDataSourceJdbcTemplate,无需手动配置数据源。

  • 参数绑定
    使用 ? 占位符防止 SQL 注入,JdbcTemplate 自动处理参数预编译。

  • 结果映射
    BeanPropertyRowMapper 自动将结果集映射到 POJO,需确保字段名与类属性一致。


通过以上步骤,即可高效使用 Spring JDBC 进行数据库操作,避免冗余代码,同时保证资源安全和事务一致性。

相关文章:

  • 私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档
  • Go语言学习笔记(一)
  • 【论文阅读】Dual-branch Cross-Patch Attention Learning for Group Affect Recognition
  • 代理模式:控制对象访问的中间层设计
  • 论文阅读 | 大模型工具调用控制的策略优化
  • Spark与Hadoop之间的联系与区别
  • 使用nodeJs的express+axios+cors做代理
  • 配置MambaIRv2: Attentive State Space Restoration的环境
  • Sql刷题日志(day5)
  • 说一下Redis的发布订阅模型和PipeLine
  • OpenBayes 一周速览|EasyControl 高效控制 DiT 架构,助力吉卜力风图像一键生成;TripoSG 单图秒变高保真 3D 模型
  • leetcode hot100尝试1
  • 零基础入门 Verilog VHDL:在线仿真与 FPGA 实战全流程指南
  • 鸿蒙中的并发线程间通信、线程间通信对象
  • 状态模式(State Pattern)详解
  • Python | 分层线性模型的实现及示例
  • 什么是鸿蒙南向开发?什么是北向开发?
  • PHP 反序列化原生类 TIPS字符串逃逸CVE 绕过漏洞属性类型特征
  • 集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解
  • 2025山东省职业院校技能大赛网络安全赛项样题
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿
  • 2025年一季度上海市生产总值
  • 快评|对华关税或“大幅下降”,市场压力之下特朗普“急于与中国达成协议”
  • 工程院院士应汉杰不再担任苏州大学校长
  • 陈曦任中华人民共和国二级大法官
  • 举报人不服相关部门奖励“缺斤少两”,两地分别作出再认定