下面是详细讲解“spring 整合 JDBC 和 AOP 事务的方法”的完整攻略:
一、准备工作
- 引入 Spring 和 JDBC 的依赖
在 pom.xml
中添加以下依赖:
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<!-- MySQL JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
- 创建数据库表和记录
创建 user
表,并插入一条记录:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `user` (`name`, `age`) VALUES ('张三', 20);
二、JDBC 的配置
在 Spring 配置文件中配置 JdbcTemplate
和数据源(这里用的是 MySQL 数据库):
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
三、AOP 事务的配置
- 配置事务管理器
在 Spring 配置文件中配置 DataSourceTransactionManager
:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
- 配置事务通知
在 Spring 配置文件中配置事务通知,来控制哪些方法应该使用事务:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="get*" read-only="true" />
<tx:method name="search*" read-only="true" />
</tx:attributes>
</tx:advice>
在上面的配置中,我们控制了所有以 add
、delete
、update
开头的方法都使用事务,并且设置了只读事务的超时时间为 5 秒。
- 配置切面
在 Spring 配置文件中配置切面,来将事务通知绑定到对应的方法上:
<aop:config>
<aop:pointcut id="crudPointcut" expression="execution(* com.example.demo.dao.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="crudPointcut" />
</aop:config>
在上面的配置中,我们将 crudPointcut
应用于 com.example.demo.dao
包中的所有方法,并将 txAdvice
绑定到 crudPointcut
上。
四、示例
下面,我们可以通过以下两个示例来演示 Spring 整合 JDBC 和 AOP 事务的方法。
示例 1:添加用户
- 在 DAO 接口中定义添加用户的方法:
public interface UserDao {
void addUser(User user);
}
- 在 DAO 实现类中实现添加用户的方法,并使用
JdbcTemplate
来执行 SQL 语句:
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addUser(User user) {
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());
}
}
- 在 Service 中调用 addUser 方法:
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
userDao.addUser(user);
}
}
- 在 Controller 中调用 addUser 方法:
@Controller
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/user/add")
@ResponseBody
public String addUser(@RequestParam String name, @RequestParam int age) {
userService.addUser(new User(name, age));
return "success";
}
}
示例 2:删除所有用户
- 在 DAO 接口中定义删除所有用户的方法:
public interface UserDao {
void deleteAllUser();
}
- 在 DAO 实现类中实现删除所有用户的方法,并使用
JdbcTemplate
来执行 SQL 语句:
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void deleteAllUser() {
String sql = "DELETE FROM user";
jdbcTemplate.update(sql);
}
}
- 在 Service 中调用 deleteAllUser 方法:
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void deleteAllUser() {
userDao.deleteAllUser();
}
}
- 在 Controller 中调用 deleteAllUser 方法:
@Controller
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/user/deleteAll")
@ResponseBody
public String deleteAllUser() {
userService.deleteAllUser();
return "success";
}
}
五、总结
通过以上攻略,我们已经成功地使用 Spring 整合 JDBC 和 AOP 事务来实现用户增删的功能。其中,配置文件中的 DataSourceTransactionManager
、tx:advice
、<aop:config>
和切面等配置都非常关键,需要仔细理解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring 整合JDBC和AOP事务的方法 - Python技术站