1.JdbcTemplate简介
为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法.
每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
2.JdbcTemplate类的常用操作
- update();该方法为重载方法,用来执行单个非查询语句;
- query();该方法也是重载方法,根据参数的不同,执行不同的查询语句;
- batchUpdate();批量更新(非查询语句sql)
- queryForObject();执行单个查询
3.使用JdbcTemplate的步骤
- 由Spring创建数据源(DataSource)即数据库连接池;
<!-- 配置dataSource(数据库连接池c3p0) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/具体数据库"></property>
<property name="user" value="用户名"></property>
<property name="password" value="密码"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
</bean>
- 由Spring创建JdbcTemplate;
<!-- jdbc模版 -->
<bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
- 自定义DAO,使用@Autowired注解自动注入JdbcTemplate
@Autowired
JdbcTemplate jdbc;
4.Spring的事务
- 编程式事务:需要手动编写事务相关的代码(复杂)
- 声明式事务:使用@Transactional注解控制事务(简单)
5.创建声明式事务的步骤
1: 创建事务管理器
<!-- 创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2: 定义@Transactional注解驱动(需要加入Spring的tx命名空间)
<!-- 配置事务Annotation驱动 -->
<tx:annotation-driven/>
3: 给service方法加入注解,控制事务
@Transactional
public void buy(int isbn,int id,Integer num) throws Exception{
//获取图书价格
int price=bookDao.getPriceByIsbn(isbn);
//修改库存
bookDao.updateBookStock(num,isbn);
//修改余额
aDao.updateAccountBalance(price*num, id);
//先执行操作,再进行判断可以防止幻读
int stock=bookDao.getStockByIsbn(isbn);
if(stock<0){
throw new Exception("----------库存不足-----------");
}
int balance=aDao.getAccount(id);
if(balance<0){
throw new Exception("----------余额不足-----------");
}
}