1.JDBC实现的事务:
2.Hibernate实现的事务:
不像JDBC并未提供单独的类来表示事务,Hibernate提供了接口Transaction来表示事务。这个接口有多个实现用于不同的开发需求和环境,其默认实现为JDCBCTransaction,以这个类的源码来观察Transaction。
Transaction接口的核心方法有三个:
begin()代码
commit()代码
rollback()
可见HIberante的事务T\ransaction所做的主要事情实现上还是那么些,但它在异常控制上做了更加细致的工作。有一点不明白的是 callback是用来干什么的?
- import java.sql.*;
- public class JDBCTest {
- public static void main(String[] args)throws Exception{
- Connection con=null;
- Statement st=null;
- try{
- Class.forName("org.gjt.mm.mysql.Driver").newInstance();
- con=DriverManager.getConnection("jdbc:mysql://localhost/test","xx","....");
- boolean b=con.getAutoCommit();
- if(b){
- con.setAutoCommit(false);
- }
- else{
- System.out.println("The transaction is not auto commit.");
- }
- st=con.createStatement();
- String sql="insert into user values(2,'test1','武汉理工','12345678')";
- boolean r=st.execute(sql);
- con.commit();
- if(b){
- System.out.println("The sql is not executed succssful");
- }
- }
- catch(Exception e){
- con.rollback();
- e.printStackTrace();
- }
- finally{
- if(st!=null){
- st.close();
- }
- if(con!=null){
- con.setAutoCommit(true);
- con.close();
- }
- }
- }
- }
2.Hibernate实现的事务:
不像JDBC并未提供单独的类来表示事务,Hibernate提供了接口Transaction来表示事务。这个接口有多个实现用于不同的开发需求和环境,其默认实现为JDCBCTransaction,以这个类的源码来观察Transaction。
Transaction接口的核心方法有三个:
- public void begin() throws HibernateException;
- public void commit() throws HibernateException;
- public void rollback() throws HibernateException;
- if (toggleAutoCommit) {
- jdbcContext.connection().setAutoCommit(false);
- //由于JDBC的默认提交方式是自动提交,这里将其设置成非自动提交。
- }
- ............
- callback = jdbcContext.registerCallbackIfNecessary();
- ...........
- jdbcContext.afterTransactionBegin(this);
- if ( callback ) {
- jdbcContext.beforeTransactionCompletion( this );
- }
- try {
- commitAndResetAutoCommit();
- //jdbcContext.connection().commit();上面这个方法的实现
- committed = true;
- if ( callback ) {
- jdbcContext.afterTransactionCompletion( true, this );
- }
- afterTransactionCompletion( Status.STATUS_COMMITTED );
- }
- try {
- rollbackAndResetAutoCommit();
- //jdbcContext.connection().rollback();上面这个方法的实现
- rolledBack = true;
- afterTransactionCompletion(Status.STATUS_ROLLEDBACK);
- }
- catch (SQLException e) {
- ......
- }
- finally {
- if ( callback ) {
- jdbcContext.afterTransactionCompletion( false, this );
- }
- closeIfRequired();
- }
可见HIberante的事务T\ransaction所做的主要事情实现上还是那么些,但它在异常控制上做了更加细致的工作。有一点不明白的是 callback是用来干什么的?