Spring的数据库编程
Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,但在实际应用中jdbcTemplate并不常用。工作更多的时候,用的是Hibernate框架和MyBatis框架进行数据库编程
Spring JDBC的配置(jdbcTemplate)
Spring数据库编程主要使用Spring JDBC模块的core和dataSource包。core包是JDBC的核心功能包,包括常用的JdbcTemplate类;dataSource包是访问数据源的工具类包。使用Spring JDBC操作数据库,需要对其进行配置。
配置JDBC模板时,需要将dataSource注入到jdbcTemplate,在数据访问层(Dao类)需要使用jdbcTemplate时,也需要将jdbcTemplate注入到对应的Bean中。
案例实现
- pom.xml导入jdbc依赖
<!-- jdbc连接 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
- 在applicationContext.xml中配置数据源和jdbc模板(配置JDBC模板时,需要将dataSource注入到jdbcTemplate)
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描包-->
<context:component-scan base-package="com.xgf.transaction.springjdbc"/>
<!-- 配置数据源数据库连接 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</bean>
<!-- 将dataSource注入到jdbcTemplate 封装数据库操作方法,简化数据库操作 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 事务管理器 完成手动事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"/>
</bean>
</beans>
- 创建UserDao数据库访问层的模板
在数据访问层(Dao类)需要使用jdbcTemplate时,所以在配置applicationContext.xml时需要将jdbcTemplate注入到对应的Bean中 。
@Repository
public class UserDaoTemplete {
/*注入 JdbcTemplate*/
@Autowired
private JdbcTemplate jdbcTemplate;
// 注入事务管理
@Autowired
private TransactionTemplate transactionTemplate;
public void save(){
transactionTemplate.execute(new TransactionCallback(){
/*业务逻辑*/
@Override
public Object doInTransaction(TransactionStatus transactionStatus) {
String sql = "insert into user(id,username,password,age) values(?,?,?,?)";
Object[] params = new Object[]{
null,"springjdbc - study day","123456",20};
jdbcTemplate.update(sql,params);
//出现异常,事务会回滚,不会写入数据库中
//int i = 100/0;
System.out.println("save() - 用户数据保存成功");
return null;
}
});
}
}
- 编写测试类
public class SpringJDBCTest {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("com/xgf/transaction/springjdbc/applicationContext.xml");
UserDaoTemplete userDao = (UserDaoTemplete)context.getBean("userDaoTemplete");
userDao.save();
}
}
- 运行结果
- 测试出现异常,事务是否回滚(i = 100/0)
先更新数据,再出现异常
查看数据库的更新情况,发现数据没有更新,事务回滚,删除错误添加。