Dao中不应该出现事务,应该由service中处理事务,但是service不能出现connection这个对象,所有会对connection这个对象进行封装
private static Connection con=null; //使用文件的默认配置 private static ComboPooledDataSource dataSource=new ComboPooledDataSource(); //返回一个连接对象 public static Connection getConnection()throws SQLException{ if(con!=null){ return con; } return dataSource.getConnection(); } //得到连接池的对象 public static DataSource getDataSource(){ return dataSource; } //开启事务 //获得一个connection对象,设置它的setAutoCommit(false) //保证dao中的连接是我们刚刚创建的 //创建一个connection,设置为手动提交 //把这个connection给dao //rooback和commit都可以得到 public static void beginTransaction() throws SQLException{ if(con!=null){//避免因为开了很多次而出现事务的connection不是同一个的情况 throw new RuntimeException("兄弟开一次就好了嘛,紧到开,你是吃霉了啊!"); } con=getConnection();//为con赋值 con.setAutoCommit(false); } //提交事务 //获得beginTransaction提供的connection对象,然后调用commit方法 public static void commitTransaction() throws SQLException{ if(con==null) throw new RuntimeException("还没开启,你就提交,你在™逗我");//避免出现因为还未出现实物connection对象的情况的出现 con.commit(); con.close(); con=null; } //提交事务 //获得beginTransaction提供的connection对象,然后调用rollback方法 public static void rollbackTransaction() throws SQLException{ if(con==null) throw new RuntimeException("还没开启,你就回滚,你在™逗我");//避免出现因为还未出现实物connection对象的情况的出现 con.rollback(); con.close(); con=null; }