在javaee的三层结构中,为什么事物存在于业务层
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库
千家信息网最后更新 2025年11月07日在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安全错误
数据库的锁怎样保障安全
有关网络安全ppt
什么是不属于数据库技术应用
云梦网络技术工资多少
系统及软件开发商省份
朝阳品牌服务器回收报价单
上海软件开发工程师工资
上海葛公软件开发有限公司
mdb数据库什么意思
安卓服务器管理
云南省酒店软件开发有限公司
南京服务管理软件开发
网络安全的宣传漫画
亿佰网络技术有限公司
网络安全进校园宣传
联想服务器代理服务
辛集oa办公系统网络技术
sql查询数据库空间
数据库技术工作方向
2022年网络安全工作思路
青海超市电商软件开发
网络安全风险防范能力加强
现代通信网络技术演讲
项城市网络安全宣传活动
管理群 群数据库设计
青州网络技术好韩波不错
读取数据库最大值命令
商云8安装数据库方法
软件开发过程需求分析评审
巨大的数据库 翻译
财政部门网络安全宣传横幅