在javaee的三层结构中,为什么事物存在于业务层
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,我们都知道在javaee实际开发中,分为3层结构来开发,controller,service和dao那么为什么事物要存在于业务层中,事物是通过connection对象操作的,使用原始jdbc链接数据库
千家信息网最后更新 2025年02月03日在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安全错误
数据库的锁怎样保障安全
文件服务器系统
为什么服务器没有重启
推进网络安全服务体系建设
删除公司数据库是什么感觉
html5数据库教学视频
软件开发广州培训机构
app遭到数据库侵入
opc新建数据库
数据库中重复键是什么
计算机软件开发商
破釜沉舟美剧软件开发
数据库索引是提高效率吗
跟access一样的数据库
南京云谷网络技术有限公司
网络安全工作总结
网络安全知名上市公司
刺激战场的新服务器在哪里
数据库原理与应用英语怎么说
黄埔区光纤网络技术开发商家
搭建自己的私有云服务器
传奇数据库物叠加
一台服务器设置两个运营商域名
快速查询数据库的作用
医疗软件开发上有专利证书吗
vr软件开发与设备
das软件开发密码
ps4无法连接到服务器已确认
网络安全大赛谢柯明
数据库三级模式两级影像
浙江云峰网络技术有限公司