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

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

以下是使用 非注解方式(纯 XML 配置)实现 Spring JDBC 的完整示例:


1. 项目依赖(不变)

<!-- pom.xml -->
<dependencies><!-- Spring JDBC --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version></dependency><!-- 数据库驱动(MySQL) --><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>
</dependencies>

2. XML 配置文件(applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 1. 数据源配置 --><bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/testdb"/><property name="username" value="root"/><property name="password" value="password"/><property name="maximumPoolSize" value="10"/></bean><!-- 2. JdbcTemplate 配置 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><!-- 3. DAO 层配置 --><bean id="userDao" class="com.example.dao.UserDaoImpl"><property name="jdbcTemplate" ref="jdbcTemplate"/></bean><!-- 4. 事务管理器配置 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 5. 启用事务注解(可选,如果不用注解可删除) --><tx:annotation-driven transaction-manager="transactionManager"/></beans>

4. DAO 接口及实现类(无注解)

UserDao 接口
package com.example.dao;import com.example.model.User;
import java.util.List;public interface UserDao {void insertUser(User user);List<User> findAllUsers();User findUserById(int id);
}
UserDaoImpl 实现类
package com.example.dao;import com.example.model.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;public class UserDaoImpl implements UserDao {private JdbcTemplate jdbcTemplate;// 通过 Setter 方法注入 JdbcTemplatepublic void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic void insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}@Overridepublic List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}@Overridepublic User findUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));}
}

5. 事务管理(XML 配置)

通过 AOP 配置事务

applicationContext.xml 中添加以下配置:

<!-- 定义事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="find*" read-only="true"/></tx:attributes>
</tx:advice><!-- 定义 AOP 切面 -->
<aop:config><aop:pointcut id="userServiceMethods" expression="execution(* com.example.service.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="userServiceMethods"/>
</aop:config>

6. Service 层(无注解)

UserService 类
package com.example.service;import com.example.dao.UserDao;
import com.example.model.User;
import java.util.List;public class UserService {private UserDao userDao;// 通过 Setter 方法注入 UserDaopublic void setUserDao(UserDao userDao) {this.userDao = userDao;}public void createUser(User user) {userDao.insertUser(user);// 其他业务逻辑(事务会自动回滚)}public List<User> getAllUsers() {return userDao.findAllUsers();}
}

7. 测试类(无注解)

import com.example.model.User;
import com.example.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {// 加载 XML 配置文件ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取 Service 实例UserService userService = context.getBean(UserService.class);// 测试插入用户User user = new User();user.setName("Alice");user.setEmail("alice@example.com");userService.createUser(user);// 测试查询System.out.println(userService.getAllUsers());context.close();}
}

关键点说明

  1. 依赖注入:通过 <property> 标签在 XML 中完成依赖注入,替代 @Autowired
  2. 事务管理:通过 <tx:advice><aop:config> 配置声明式事务,替代 @Transactional
  3. 配置集中化:所有配置集中在 applicationContext.xml 中,无需注解。
  4. 兼容性:此方式适用于不支持注解的老旧项目或需要严格分离配置的场景。

通过以上步骤,即可在不使用任何注解的情况下实现 Spring JDBC 的完整功能。

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

相关文章:

  • HashedWheelTimer源码分析
  • 网络安全中Base64编码到后端是何解了
  • 图解Mysql原理:深入理解事务的特性以及它的实现机制
  • IDEA设置手动代理,用户名密码被加密无法通过代码修改的解决方案
  • 4082P 信号/频谱分析仪
  • Javase 基础入门 —— 03 面向对象编程
  • (三)垂直分库架构、分布式数据库
  • MySQL 锁机制
  • 【EasyPan】MySQL FIELD() 函数实现自定义排序
  • [KVM] KVM挂起状态恢复失败与KVM存储池迁移
  • Geek强大的电脑卸载软件工具,免费下载
  • 逻辑漏洞安全
  • 基于javaweb的SSM宠物商城设计与实现(源码+文档+部署讲解)
  • 配电室安全用电漏电保护装置的安全用电措施
  • 高等数学第一章---函数与极限(1.2 数列的极限1)
  • 项目文章 ▏c-di-GMP协同WYL转录因子调控植物乳杆菌肠道定殖的分子机制
  • 互联网黑灰产攻击场景分析
  • 为什么 requests 不是 python 标准库?
  • 初始SpringBoot
  • 2025年【安全员-C证】考试试卷及安全员-C证模拟考试
  • 03-谷粒商城笔记
  • STM32与i.MX6ULL内存与存储机制全解析:从微控制器到应用处理器的设计差异
  • WebSocket是h5定义的,双向通信,节省资源,更好的及时通信
  • LLM优化提示词方案的方法
  • 深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
  • 使用Python实现简单爬虫:从入门到实践
  • 21.disql命令登录达梦数据库,查询并操作数据库
  • MVVM框架详解:原理、实现与框架对比
  • 数据集 | 苹果目标检测数据集
  • 【AI提示词】营养师顾问