service+utils事務模板

package com.ymh.jdbc;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.jetbrains.annotations.Contract;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author cobblepot.ymh on 2017/10/11 下午7:48.
 */

public class JdbcUtils {
    //配置文件的默認配置,要求必須給出c3p0-config.xml
    private  static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();

    //事務專用鏈接
    private static Connection connection = null;

    /**
     * 使用連接池返回一個連接對象
     * @return
     */
    public static Connection getConnection() throws SQLException {
        if(connection != null){
            return connection;
        }
        return comboPooledDataSource.getConnection();
    }

    /**
     * 返回連接池對象
     */
    @Contract(pure = true)
    public static DataSource getDataSource(){
        return comboPooledDataSource;
    }

    /**
     *  開啓事務
     *  1.獲取事務,設置setAutoCommit(false)
     *  2.還要保證dao中使用的連接是我們剛剛創建的
     *
     *  1.創建一個Connection,設置爲手動提交
     *  2.把這個Connection給dao用
     *  3.還要讓commitTransaction顴rollbackTransaction可以獲取到
     */
    public static void beginTransaction() throws SQLException {
        /*
         *  1.給connection賦值
         *  2.設置手動提交
         */
        connection = getConnection();
        connection.setAutoCommit(false);
    }

    /**
     *  提交事務
     *  1.獲取beginTransaction提供的Connection,然後調用commit方法
     */
    public static void commitTransaction() throws SQLException {
        connection.commit();
        connection.close();
    }

    public static void bollbackTransaction() throws SQLException {
        connection.rollback();
        connection.close();
    }

}
package com.ymh.jdbc;

import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author cobblepot.ymh on 2017/10/11 下午8:37.
 */

public class AccountDao {

    public static void update(String name, double money) throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        String sql = "update balance set balance = balance + ? where name = ?";
        Object[] params = {money, name};

        //需要自己提供連接,保證多次調用使用的是同一個連接
        Connection connection = JdbcUtils.getConnection();
        queryRunner.update(sql,params);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章