千家信息网

在javaee的三层结构中,为什么事物存在于业务层

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库
千家信息网最后更新 2026年10月31日在javaee的三层结构中,为什么事物存在于业务层

我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao

那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库的链接也是connection操作的,connection是在到是怎么传递到dao的呢?

这里讲解两种方式
第一种通过形式参数的方式

第二种通过ThreadLocal的方式
ThreadLocal的底层是个map,该map的key是固定的,当前线程。value可以让我们存入任意对象

public class JdbcUtils {    // 成员变量,创建了C3P0的连接池(连接池中已经存在连接了...)    private static final ComboPooledDataSource DATASOURCE = new ComboPooledDataSource();    // 把Connection绑定到当前的线程中    private static ThreadLocal tl = new ThreadLocal();    /**     * 返回的是C3P0的连接池     * @return     */    public static DataSource getDataSource(){        return DATASOURCE;    }    /**     * 获取连接,返回连接     * @return     * @throws SQLException      */    public static Connection getConnection() throws SQLException{        Connection conn = null;        // 从tl中获取        conn = tl.get();        if(conn == null){            // 从连接池中获取连接            conn = DATASOURCE.getConnection();            // 非常关键,把连接存入到tl中            tl.set(conn);        }        return conn;    }    /**     * 开启事务     * @throws SQLException      */    public static void beginTransaction() throws SQLException{        // 调用getConnection()        Connection conn = getConnection();        conn.setAutoCommit(false);    }    /**     * 提交事务     * @throws SQLException      */    public static void commitTransaction() throws SQLException{        // 调用getConnection()        Connection conn = getConnection();        conn.commit();    }    /**     * 回滚事务     * @throws SQLException      */    public static void rollBackTransaction() throws SQLException{        // 调用getConnection()        Connection conn = getConnection();        conn.rollback();    }    /**     * 归还连接     * @throws SQLException      */    public static void closeConn() throws SQLException{        // 调用getConnection()        Connection conn = getConnection();        conn.close();        tl.remove();    }    /**     * 释放资源     * @param stmt     * @param conn     */    public static void release(Statement stmt,Connection conn){        if(stmt != null){            try {                stmt.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(conn != null){            try {                // 已经变成了归还了...                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }    /**     * 释放资源     * @param stmt     * @param conn     */    public static void release(ResultSet rs,Statement stmt,Connection conn){        if(rs != null){            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(stmt != null){            try {                stmt.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(conn != null){            try {                // 把close()给修改了,原来是销毁连接,现在让方法变成归还连接。                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}
事务 方式 事物 对象 线程 资源 链接 开发 业务 结构 原始 关键 参数 变量 实际 底层 形式 形式参数 成员 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 上海睿民互联网科技有限公司 互联网属科技 互联网品科技 科技信息互联网 碳银互联网科技 新浪科技互联网 苏州大垚互联网科技 科技伦理 互联网公司 上海电发互联网科技有限公司 字节跳动和互联网科技 湖北码尼互联网科技有限公司电话 新兴科技互联网创新大赛颁奖典礼 互联网科技和信息 浙南科技城互联网大厦建设工程 互联网在线教育科技创业 国大互联网教育科技有限公司薪资 美国互联网科技公司 珠海东科互联网科技有限公司 数字科技和互联网金融哪个好 科技创新与互联网经济 华中科技大学互联网 易通互联网络科技有限公司 无锡溥仪互联网科技有限公司 中化能源互联网科技招聘 链环科技传统企业怎么转型互联网 允成互联网科技有限公司融资 互联网在线教育科技创业 互联网科技如何创业 西安有哪些互联网高科技企业
0