在javaee的三层结构中,为何事物存在于业务层
发布时间:2022-03-26 11:12 所属栏目:115 来源:互联网
导读:我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao 那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库的链接也是connection操作的,connection是在到是怎么传递到dao的呢? 这里讲解两种
我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao 那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库的链接也是connection操作的,connection是在到是怎么传递到dao的呢? 这里讲解两种方式 第一种通过形式参数的方式 在javaee的三层结构中,为什么事物存在于业务层 第二种通过ThreadLocal的方式 ThreadLocal的底层是个map,该map的key是固定的,当前线程。value可以让我们存入任意对象 public class JdbcUtils { // 成员变量,创建了C3P0的连接池(连接池中已经存在连接了...) private static final ComboPooledDataSource DATASOURCE = new ComboPooledDataSource(); /** * 获取连接,返回连接 * @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); /** * 提交事务 * @throws SQLException */ public static void commitTransaction() throws SQLException{ // 调用getConnection() Connection conn = getConnection(); conn.commit(); /** * 归还连接 * @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(); (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读