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

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 进行数据库操作,避免冗余代码,同时保证资源安全和事务一致性。

http://www.xdnf.cn/news/1332.html

相关文章:

  • LLama-factory微调和推理过程
  • 分布式理论和事务
  • OpenCV 中的角点检测方法详解
  • 3DGS之齐次坐标
  • 【Java面试笔记:基础】13.谈谈接口和抽象类有什么区别?
  • 基于nodeJS代码的通过爬虫方式实现tiktok发布视频(2025年4月)
  • 云原生时代的双轮驱动
  • 基于GMM的语音识别
  • 抱佛脚之学SSM五
  • Linux之彻底掌握防火墙-----安全管理详解
  • 【KWDB 创作者计划】_上位机知识篇---MQTT协议
  • 软考资料分享
  • K8S安全认证
  • 【论文阅读】Hierarchical Group-Level Emotion Recognition
  • 国产RK3568+FPGA以 ‌“实时控制+高精度采集+灵活扩展”‌ 为核心的解决方案
  • 远程控制Firefox浏览器实例的挑战与Playwright的CDP和Selenium Marionette解决方案
  • Python中的“,”
  • 【OceanBase相关】02-OceanBase数据库NFS备份实践
  • C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
  • ADW600防护等级与电气安全设计要点详解
  • 深入探究Linux项目自动化构建工具:make与Makefile
  • Kafka 主题设计与数据接入机制
  • windos端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
  • Uniapp 中缓存操作指南
  • 【笔记】CentOS7部署K8S集群
  • unity编辑器的json验证及格式化
  • 明远智睿2351开发板:性价比之选,赋能智能硬件创新
  • QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码
  • 【playwright】学习--持续汇总
  • CMake 入门指南:从零开始配置你的第一个项目