Spring知识点小结(四)
一、JdbcTemplate(jdbc模版--抽取的工具)
web阶段DBUtils:
QueryRunner runner = new QueryRunner(dataSource);
runner.update()/query();
spring的JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
jdbcTemplate.update()/query();
//查询全部数据
jdbcTemplate.query("select * from table",newBeanPropertyRowMapper<Pojo>(Pojo.class));
//查询单个实体
jdbcTemplate.queryForObject("select * from table where name=?", new BeanPropertyRowMapper<Pojo>(Pojo.class), "tom");
//查询单个值
jdbcTemplate.queryForObject("select count(*) from table ", new BeanPropertyRowMapper<Pojo>(Pojo.class));
开发步骤:
Spring-jdbc.jar 内部封装JdbcTemplate
Spring-tx.jar JdbcTemplate使用事务相关API
connector.jar 数据库驱动
dataSource.jar 数据源的jar包
二、声明式事务控制
1、复习事务相关概念
1、事务的特性ACID
原子性
一致性
隔离性
持久性
2、事务并发产生的问题
脏读:A事务读取到了B事务尚未提交的数据
不可重复读:一个事务中多次读取到的数据的内容不一致
虚读/幻读:一个事务中多次读取数据的条数不一致
3、事务的隔离级别(isolation)
read uncommitted: 都不能解决 基本没人使用
read committed:解决脏读 oracle的默认隔离级别
repeatable read:解决脏读和不可重复度 mysql的默认隔离级别
serializable:串行化 都能解决
2、Spring提供编程式事务控制的API
1、PlatformTransactionManager(需要配置):平台事务管理器(接口)
规定事务控制的行为:开启事务、提交事务、回滚事务...
不同的技术 事务控制的方式不一样:
jdbc技术:
开启事务:conn.setAutocommit(false)
提交事务: conn.commit();
回滚事务: conn.rollback();
hibernate技术:
开启事务: session.beginTransaction();
提交事务: transaction.commit();
回滚事务: transaction.rollback();
常用的平台事务管理器实现:
jdbc技术:DataSourceTransactionManager
hibernate技术:HibernateTransactionManager
2、TransactionDefination(需要配置):事务定义对象
该对象作用封装一些事务的相关的属性的:事务的隔离级别、事物的传播行为、事务的超时时间、事务是否只读
事务的隔离级别:isolation
事物的传播行为:propogation
传播行为的作用:业务方法调用业务方法时 事务的嵌套问题的
事务的超时时间:timeout
事务是否只读:read-only
3、TransactionStatus:事物的状态对象
该对象是封装不同的阶段,事务不同的状态信息的
3、基于xml方式声明式事务控制(重点)
底层就是aop
切点:service层业务方法
增强:事务增强
切面:通过配置方式进行织入
开发步骤:
1、导入额外jar:spring-tx.jar
注意:导入spring的基本开发包和aop包
2、定义业务类(service),配置到spring容器中
业务类中的方法就是切点
public class AccountServiceImpl implements AccountService
public void transfer(String outMan, String inMan, double money)
<bean id="accountService" class="com.jjy.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"></property>
</bean>
3、配置增强
<!-- 配置平台事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务的增强 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
4、配置切点与事务增强的aop织入
<!-- 配置事务的aop织入 -->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.jjy.service.impl.*.*(..))"/>
</aop:config>
4、基于注解方式的声明式事务控制
开发步骤:
1、导入额外jar:spring-tx.jar
注意:导入spring的基本开发包和aop包
2、定义业务类(service),配置到spring容器中
业务类中的方法就是切点
@Service("accountService")
public class AccountServiceImpl implements AccountService
3、配置切点与事务增强的aop织入
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)
public void transfer(String outMan, String inMan, double money)
4、在xml中进行组件扫描和事务的注解驱动
<!-- 组件扫描 -->
<context:component-scan base-package="com.jjy"></context:component-scan>
<!-- 事务的注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
Spring知识点小结(四)的更多相关文章
- Spring知识点小结(一)
一.Spring的简介 1.spring是一个full-stack轻量级开源框架 2.spring的两大核心 IoC: inverse of control 控制反转:反转是对象 ...
- Spring知识点小结汇总
Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...
- Spring知识点小结(三)
一.aop的简介 aop:面向切面编程 aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现 aop是在运行期间使用动态代理技术实现的思想 aop是oop延 ...
- Spring知识点小结(二)
一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源: 导入dbcp的jar包:dbcp+pool+connector 代码实现: ...
- Spring知识点总结(四)之SpringAOP基础
1. Spring aop中的基本概念 • 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接 ...
- Spring知识点总结(四)之SpringAOP基础 - 代理设计模式
1. 分析程序中存在的问题(高内聚,低耦合) 通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...
- Hibernate知识点小结(四)--JPA
一.jpa的简介和入门 JPA:Java Persistence API,接口规范 Hinernate内部为JPA规范提供实现 开发步骤(EntityManager): ...
- Struts2知识点小结(四)--拦截器与注解开发
一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
随机推荐
- 理解mouseover,mouseout,mouseenter,mouseleave
mouseover定义和用法 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用. mouseover() 方法触发 mouseover ...
- 54个提高PHP程序运行效率的方法(转载)
原文地址:http://www.jb51.net/article/69677.htm 1. 如果一个方法可静态化,就对它做静态声明.速率可提升至4倍. 2. echo 比 print 快. 3. 使用 ...
- servlet中cookie和session操作
1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器 登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问 ...
- 谈谈CSS性能
CSS性能优化 1.衡量属性和布局的消耗代价: 2.探索W3C的性能优化新规范: 3.用测试数据判断优化策略. 慎重选择高消耗的样式 1.box-shadows; 2.border-radius; 3 ...
- lua 中的上n级模块路径函数分享
--- 得到 lua 模块路径的上 n 级,返回的的字符串结尾有个 "." 字符 -- @usage getUpFloder("math.base.core", ...
- element ui下拉框如何实现默认选择?
<template> <el-select v-model="value4" clearable placeholder="请选择"> ...
- CASE表达式
一.简介 官方定义CASE是一种表达式,它基于某种格式,按照格式去编写表达式,其中表达式的逻辑是:指定特定的值与条件列表去匹配,返回对应的值. CASE表达式类似我们编程语言中的 if else 和 ...
- 二叉树的二叉链表存储结构及C++实现
前言:存储二叉树的关键是如何表示结点之间的逻辑关系,也就是双亲和孩子之间的关系.在具体应用中,可能要求从任一结点能直接访问到它的孩子. 一.二叉链表 二叉树一般多采用二叉链表(binary linke ...
- 浅谈SAP Cloud for Sales 自动化
在Jerry还在本科进行计算机理论知识学习时,我曾经把软件开发里的质量工程师(Quality Engineer)理解成是每天只是简单地做着运行开发人员编写好的软件,如果发现问题,通知开发人员去修改这种 ...
- 入门学习webpack笔记
注意事项: 1.预热知识:前端模块化.commonJS最好提前了解.commonJS语法最好熟悉. 2.commonJS中,module表示当前模块,module.exports(或者exports) ...