JdbcTemplate(概念和准备)
1.什么是Jdbc
(1)spring框架对JDBC进行封装,使用JdbcTemplate方便实现
2.准备工作
(1)引入相关jar包
(2)在spring配置文件配置数据库连接池
<!--配置连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 获取properties文件内容,根据key获取,使用spring表达式获取 -->
<property name="driverClassName" value="${prop.driverClass}"></property>
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.username}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
(3)配置JdbcTemplate对象,注入DataSource
<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
(4)创建service类,创建dao类,在dao注入jdbcTemplate对象
JdbcTemplate 操作数据库(添加)
1.对应数据库创建实体类
2.编写service和dao
(1)在dao进行数据库添加操作
(2)调用JdbcTemplate对象里面update方法实现添加操作
update(String sql,Object....args)
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:可变参数,设置sql语句值
JdbcTemplate 操作数据库(修改和删除)
//修改
@Override
public void updateBook(Book book) {
String sql = "UPDATE t_book SET username=?,ustatus=? WHERE user_id=?";
int i = jdbcTemplate.update(sql, book.getUsername(), book.getUstatus(), book.getUserId());
System.out.println(i);
}
//删除
@Override
public void delete(int id) {
String sql = "DELETE FROM t_book WHERE user_id=?";
int i = jdbcTemplate.update(sql, id);
System.out.println(i);
}
JdbcTemplate 操作数据库(查询返回某个值)
1.查询表里面有多少条记录,返回是某个值
2.使用JdbcTemplate实现查询返回某个值代码
//查询
@Override
public int selectCount() {
String sql = "SELECT COUNT(*) FROM t_book";
Integer i = jdbcTemplate.queryForObject(sql, Integer.class);
return i;
}
```java
queryForObject(String sql, Class<T> requiredType)
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:返回类型Class
JdbcTemplate 操作数据库(查询返回对象)
1.场景:查询图书详情
2.JdbcTemplate实现查询返回对象
queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
- 有三个参数
- 第一个参数:sql语句
- 第二个参数:RowMapper,是一个接口,返回不同类型的数据,使用这个接口里面实现类完成数据封装
- 第三个参数:sql语句值
JdbcTemplate 操作数据库(查询返回集合)
1.场景:查询图书列表分页
2.调用JdbcTemplate实现查询返回对象
JdbcTemplate 操作数据库(批量操作)
1.批量操作:操作表里面多条记录
2.JdbcTemplate实现批量添加操作
batchUpdate(String sql,List<Object[] batchArgs>)
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:List集合,添加多条记录数据
3.JdbcTemplate实现批量修改操作
//批量修改
@Override
public void batchUpdate(List<Object[]> batchArgs) {
String sql = "UPDATE t_book SET username=?,ustatus=? WHERE user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(ints.length);
}
事务概念
1.什么是事务
(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败。
(2)典型场景:银行转账
2.事务四个特性(ACID)
(1)原子性
(2)一致性
(3)隔离性
(4)持久性
事务操作(spring事务管理介绍)
1.事务添加到JavaEE三层结构里面Service层(业务逻辑层)
2.在spring进行事务管理操作
(1)有两种方式:编程式事务管理和声明式事务管理(使用)
3.声明式事务管理
(1)基于注解方式(使用)
(2)基于xml配置文件方式
4.在spring进行声明式事务管理,底层使用AOP原理
5.spring事务管理API
(1)提供一个接口,代表事务管理器,,这个接口针对不同的框架提供不同的实现类
事务操作(注解声明式事务管理)
1.在spring配置文件配置事务管理器
<!-- 创建事物管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入 数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
2.在spring配置文件,开启事务注解
(1)在spring配置文件引入名称空间tx
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
(2)开启事务注解
<!-- 开启 事物 注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
3.在service类上面(获取service类里面方法上面)添加事务注解
(1)@Transactional,这个注解添加到类上面,也可以添加方法上面
(2)如果把这个注解添加类上面,这个类里面所有方法都添加事务
(3)如果把这个注解添加方法上面,为这个方法添加事务
事务操作(声明式事务管理参数配置)
1.在service类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数
2.Propagation:事务传播行为
事务方法:对数据库表数据进行变化的操作(增删改)
(1)多事务方法直接进行调用,这个过程中事务是如何进行管理的
3.isolation:事务隔离级别
(1)事务有特性成为隔离性,多事务操作之间不会产生影响,不考虑隔离性产生很多问题。
(2)有三个读问题:脏读、不可重复读、虚(幻)读
(3)脏读:一个未提交事务读取到了另一个未提交事务的数据
(4)不可重复读:一个未提交事务读取到另一提交事务修改的数据
(5)虚(幻)读:一个未提交事务读取到另一提交事务添加的数据
(6)通过设置事务隔离性,解决读问题
4.timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不提交进行回滚
(2)默认值是-1,设置时间以秒单位进行计算
5.readOnly:是否只读
(1)读:查询操作,写:添加修改删除操作
(2)readOnly默认值false,表示可以查询,可以添加修改删除操作
(3)设置readOnly值是true,设置成true之后,只能查询
6.rollbackFor:回滚
(1)设置出现哪些异常进行事务回滚
7.noRollbackFor:不回滚
(1)设置出现哪些异常不进行事务回滚
事务操作(xml声明式事务管理)
1.在spring配置文件中进行配置
第一步 配置事务管理器
第二步 配置通知
第三步 配置切入点和切面