dao层代码如下:

package beyond.transfer.dao;import java.sql.Connection;
import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import beyond.utils.DataSourceUtils;
import beyond.utils.MyDataSourceUtils;public class TransferDao {public void out( String out, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿参数Connection conn = MyDataSourceUtils.getCurrentConnection();String sql = "update account set money= money-? where name=?";runner.update(conn, sql, money,out);}public void in(String in, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿参数Connection conn = MyDataSourceUtils.getCurrentConnection();String sql = "update account set money= money+? where name=?";runner.update(conn, sql, money,in);}}

service层代码如下:

package beyond.transfer.service;import java.sql.Connection;
import java.sql.SQLException;import beyond.transfer.dao.TransferDao;
import beyond.utils.DataSourceUtils;
import beyond.utils.MyDataSourceUtils;public class TransferService {public boolean transfer(String out, String in, double money) {//创建dao层对象TransferDao dao = new TransferDao();boolean isTransferSuccess = true;Connection conn = null;try {//进行事务控制,开启事务//conn = DataSourceUtils.getConnection();//不自动开启事务,也就是手动开启事务//conn.setAutoCommit(false);//开启事务MyDataSourceUtils.startTransaction();//调用dao层的转出钱的方法,只需要知道 转钱的人是谁 跟 钱数 就行dao.out(out,money);//调用dao层的转入钱的方法,只需要知道 转给谁 跟 钱数 就行dao.in(in,money);} catch (SQLException e) {isTransferSuccess = false;try {//当出现事务错误,进行事务的回滚;回滚本身内部不包含提交的功能MyDataSourceUtils.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally{try {MyDataSourceUtils.commit();} catch (SQLException e) {e.printStackTrace();}}return isTransferSuccess;}}

web层代码如下:

package beyond.transfer.web;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import beyond.transfer.service.TransferService;public class TransferServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收转账的参数String out = request.getParameter("out");String in = request.getParameter("in");String moneyStr = request.getParameter("money");double money=Double.parseDouble(moneyStr);//进行将转账金额强转//调用业务层的转账方法TransferService service = new TransferService();boolean isTransferSuccess = service.transfer(out,in,money);//解决乱码问题response.setContentType("text/html;charset=UTF-8");if(isTransferSuccess){response.getWriter().write("转账成功!!!");}else{response.getWriter().write("转账失败!!!");}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

使用ThreadLocal绑定连接资源(事务)相关推荐

  1. jdbc事务 jta事务_将非事务性资源绑定到JTA事务中的几种模式

    jdbc事务 jta事务 我最近发表了一篇有关如何将非事务性资源(如Web服务/微服务)绑定到全局分布式事务中的文章,以便自动处理恢复. 多年来,我经常不得不将"非事务性"系统集成 ...

  2. 将非事务性资源绑定到JTA事务中的几种模式

    我最近发表了一篇有关如何将非事务性资源(如Web服务/微服务)绑定到全局分布式事务中的文章,以便自动处理恢复. 多年来,我经常不得不将"非事务性"系统集成到Java EE应用程序服 ...

  3. jta atomikos_带有Atomikos示例的Tomcat中的Spring JTA多个资源事务

    jta atomikos 在本教程中,我们将向您展示如何使用Atomikos Transaction Manager在Tomcat服务器中实现JTA多个资源事务. Atomicos事务管理器为分布式事 ...

  4. 带有Atomikos示例的Tomcat中的Spring JTA多个资源事务

    在本教程中,我们将向您展示如何使用Atomikos Transaction Manager在Tomcat服务器中实现JTA多个资源事务. Atomicos事务管理器为分布式事务提供支持. 这些是多阶段 ...

  5. threadlocal存连接对象的目的_面试官:知道ThreadLocal嘛?谈谈你对它的理解?

    在java的多线程模块中,ThreadLocal是经常被提问到的一个知识点,提问的方式有很多种,可能是循序渐进也可能是就像我的题目那样,因此只有理解透彻了,不管怎么问,都能游刃有余. 这篇文章主要从以 ...

  6. mysql 不同连接的事务 会嵌套_MySQL——事务

    事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致状态转换为另一种一致状态. 关键词 事务四大特性ACID MySql事务隔离级别 MVCC多版本并发控制 实 ...

  7. 如何释放mysql连接资源_CI框架出现mysql数据库连接资源无法释放的解决方法

    本文实例分析了CI框架出现mysql数据库连接资源无法释放的解决方法.分享给大家供大家参考,具体如下: 使用ci框架提供的类查询数据: $this->load->database(); $ ...

  8. threadlocal存连接对象的目的_终于懂了ThreadLocal,不再害怕面试官问了

    ThreadLocal解析 synchronized和ThreadLocal的区别: synchronized:以时间换空间,只提供一份变量,让不同的线程排队访问,失去了并发性,降低了程序效率,着重对 ...

  9. threadlocal存连接对象的目的_ThreadLocal 介绍

    概述 ThreadLocal 是 java 提供的一个方便对象在本线程内不同方法中传递和获取的类.用它定义的变量,仅在本线程中可见和维护,不受其他线程的影响,与其他线程相互隔离. 虽然在本线程不同方法 ...

最新文章

  1. 在内存只有 24KB 的电脑上写操作系统,是怎样的体验?
  2. 深度优先 广度优先
  3. java 3d游戏_不放一行代码分享一下java实现3D游戏逻辑
  4. SQL基础【十三、通配符】
  5. java实现对大文件切割下载_Java实现大文件的切割与合并操作示例
  6. 【Git】Git提交代码到GitHub的基本操作流程
  7. 信息学奥赛C++语言: 求和
  8. localStorage sessionStorage
  9. GBK转unicode码查询表的改进
  10. 吴恩达机器学习学习笔记第九章:神经网络学习
  11. 树莓派4bwlan驱动_树莓派4到手,你了解它所使用的新版Debian系统吗?
  12. java循环1000000000_Java11比Java8快多少,不是测试人员一眼也能看懂
  13. ESP32使用Arduino环境,安装、编译、下载、安装库
  14. c#推箱子小游戏代码_用C#制作推箱子小游戏
  15. left join on 左边为主
  16. Django 1.8.2 文档 1
  17. quartz定时任务中常用的cron表达式
  18. JAVA语言程序设计
  19. 95后阿里P7晒出工资单:真的是狠狠扎心了...
  20. 蓝桥杯之《人民币金额大写》

热门文章

  1. mysql as join_mysql as 别名与 join 多表连接语法
  2. 页面跳转多种方法(加传参)
  3. 设计模式学习笔记-代理模式
  4. 创建vue项目(一)搭建vue-cli、项目文件介绍、简单配置
  5. Hbase 的javaAPI基本操作用 在idea上的实现
  6. Codevs 2756 树上的路径
  7. Ubuntu下将Sublime Text设置为默认编辑器
  8. php连接mssql数据库的几种方式
  9. asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...
  10. XML基本知识(三)