回顾
代理模式: 静态代理,基于接口的动态代理,基于子类的动态代理
AOP: 面向切面编程
基于XML的AOP配置
基于XML结合注解的AOP配置
基于纯注解的配置
案例:使用AOP的形式完成事务控制
- JdbcTemplate
增删改:update
查询一个:queryForObject
查询列表:query
1.1 基于xml的配置方式一
1.2 数据库连接池
1.2.1 Druid(重点)
1.2.2 C3P0
1.2.2.1 依赖
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
1.2.2.2 配置
1.2.3 DBCP
1.2.3.1 依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
1.2.3.2 配置
1.2.4 Spring内置的数据库连接池(重点)
1.3 基于xml的配置方式二
1.3.1 Dao需要继承JdbcDaoSupport
1.3.2 Dao依赖于datasource
1.3.3 查询数据库
1.4 基于注解结合xml的配置
对象(自定义的对象,第三方的对象)
注解需要开启支持(包扫描)
1.4.1 自定义的对象
1.4.2 第三方的对象
1.5 基于纯注解的配置
2. Spring中的事务(声明式事务)
声明式事务 : 是spring由AOP机制衍生的一个处理事务问题的配置方式
2.1 事务的API对象
2.1.1 事务管理器(PlatformTransactionManager)
事务管理器: 处理事务的AOP中的切面类
方法 : 提交,回滚
事务管理器 : PlatformTransactionManager接口
2.1.2 事务监控对象(运行状态)TransactionStatus
2.1.3 事务配置对象TransactionDefinition
TransactionDefinition: 用于配置事务属性
2.1.3.1 事务隔离级别
事务 : 逻辑上的一组操作要么同时成功,要么同时失败
特性 : 原子性,隔离性,一致性,持久性
在不考虑隔离性的前提下的问题 : 脏读,不可重复度,幻读
设置隔离级别
Read UnCommited
Read commited
Repeatable read (mysql的默认隔离级别)
SERIALIZABLE
事务隔离级别 : 默认即可
2.1.3.2 超时时间
超时时间:在规定的范围时间内,如果多个数据库操作没有执行完成,会抛出异常.
保持默认(-1) : 永不超时
2.1.3.3 传播行为
传播行为:在多个方法嵌套调用的时候,配置被调用方法对事务的要求情况
2.1.3.4 是否只读事务
只读事务 : 只会处理查询操作
非只读事务 : 只会处理增删改操作
ReadOnly : true|false
2.1.3.5 配置总结
查询 :
传播行为 : SUPPORTS
是否只读 : TRUE
增删改:
传播行为 : REQUIRED
是否只读 : false
2.2 基于XML的事务配置(重点)
2.2.1 事务管理器交给spring容器
2.2.2 事务通知
2.2.3 配置事务AOP
2.3 基于XML结合注解的事务配置(重点)
2.3.1 开启对注解事务的支持
2.3.2 事务管理器交给spring容器管理
2.3.3 在需要事务的类或者方法上配置@Transactional
2.4 基于纯注解的事务配置(了解)
2.4.1 开启对注解事务的支持
2.4.2 事务管理器交给spring容器管理
2.4.3 需要事务的类或者方法上配置@Transactional
3. Spring整合Mybatis
Mybatis : 使用xml进行配置
Spring : 使用注解结合xml进行配置
整合步骤:
- 保证mybatis可以独立运行(搭建mybatis环境)
基于动态代理的形式使用mybatis - 保证spring可以独立运行(搭建springIOC环境)
- 整合Spring和Mybatis
3.1 坐标
<dependencies>
<!--jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--datasource-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--aop坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--aspectJ : 表达式语言的jar包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<!--junit-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--c3p0-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<!--dbcp-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
3.2 整合Spring和Mybatis
将mybatis的核心配置文件中的内容在spring中进行配置
SqlSessionFactory , mapperSacnnerConfigurer, 事务
3.2.1 SqlSessionFactory
3.2.2 mapperSacnnerConfigurer
3.2.3 事务
面试总结
事务
作业:
- 基于两种配置(xml | xml+注解)方式完成转账 : jdbctemplate,事务
- 整合(可选)
- 预习springmvc第一天