博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在javaee的三层结构中,为什么事物存在于业务层
阅读量:6431 次
发布时间:2019-06-23

本文共 3128 字,大约阅读时间需要 10 分钟。

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

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

这里讲解两种方式

第一种通过形式参数的方式
在javaee的三层结构中,为什么事物存在于业务层
第二种通过ThreadLocal的方式
ThreadLocal的底层是个map,该map的key是固定的,当前线程。value可以让我们存入任意对象

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

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(); } } }}

转载于:https://blog.51cto.com/13579086/2074232

你可能感兴趣的文章
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>
思科rip、dhcp、vlan
查看>>
tomcat nginx默许的post大小限制
查看>>
OSI七层模型
查看>>
去除工程的.svn隐藏文件夹
查看>>
Python24 终端如何输出彩色字体
查看>>
XSS跨站脚本***
查看>>
Git 常用命令
查看>>
HTML基本结构
查看>>
linux 挂载光驱
查看>>
ASP.NET MVC Area操作
查看>>
CSS颜色代码大全
查看>>
LINQ之路10:LINQ to SQL 和 Entity Framework(下)
查看>>
circle area
查看>>
怎么改变按钮的图标
查看>>
当输入流和输出流同时作用一个文件
查看>>