重要概念复习

###spring常用jar包
1.spring.jar是包含有完整发布模块的单个jar包。
2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需要的类。
3.org.springframework.aspects提供了面向切面的功能。
4.org.springframework.beans所有应用都要用到的,包含访问配置文件/创建和管理bean
以及进行Inversion of Control/Dependency Injection(IOC/DI)操作相关的所有的类。
5.org.springframework.context为Spring核心提供了大量模板扩展
6.org.springframework.core包含核心工具类
7.org.springframework.expression Spring 表达式语言.
8. org.springframework.test 对 Junit 等测试框架的简单封装。
9. org.springframework.transaction 为 JDBC、Hibernate、JDO、JPA 等提供的一致的声明式和编程式事务管理。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

### 关于事务(Transaction)

在同一次操作中,如果涉及2次或更多次的增删改操作(例如1次UPDATE和1次DELETE,或2次INSERT),则应该使用事务!

在使用SSM框架时,如果需要使用事务,则使用`@Transactional`对业务类中的那个方法进行注解!则该方法会以事务的模式去执行,也就是说,这个方法中的多次增删改操作要么全部成功,要么全部失败!

在使用`@Transactional`注解后,不需要手动使用代码开启事务、提交事务、回滚事务,在没有错误的情况下,会全部成功,仅当程序运行至抛出`RuntimeException`时,会自动回滚!

所以,在编写业务类中的方法时,如果执行增删改操作出错(并不一定是SQL语法错误,凡是不符合我们设定的数据逻辑的,都视为错误),则应该抛出`RuntimeException`,使得事务自动回滚!

使用`@Transactional`也可以对类进行注解,表示这个类中所有的方法都将以事务的模式去运行,但是,一般并不推荐这样做,因为,同一个Service类中,毕竟还是有很多方法不会涉及多次增删改操作,则这些方法没有必要使用事务。

使用以上Spring-JDBC的自动事务处理,框架完成的模式大致是:

tx.begin(); // 开启事务

try {
// 执行?条SQL
} catch(RuntimeException e) {
tx.rollback();
}

tx.commit(); // 提交事务

需要添加相应的注解驱动:

<bean 
id="transactionManager"
class="xx.xx.xx.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<tx:annotaion-driven 
transaction-manager="transactionManager" />

小结:在编写业务类中的方法时,如果执行出错,则应该抛出`RuntimeException`。凡是涉及多次增删改操作的方法,都使用`@Transactional`注解。

说明:有空了解事物传播。(找个例子)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

###SQL:查询

+--------+---------+---------+
| name | kecheng | fengshu |
+--------+---------+---------+
| 张三 | 语文 | 80 |
| 张三 | 数学 | 75 |
| 李四 | 语文 | 76 |
| 李四 | 数学 | 90 |
| 王五 | 语文 | 81 |
| 王五 | 数学 | 100 |
| 王五 | 英语 | 90 |
+--------+---------+---------+

求每科成绩都大于80分的学生的姓名:

select distinct name from score where name not in(select name from score where fengshu < 80);

猜你喜欢

转载自www.cnblogs.com/shijinglu2018/p/9651560.html