jdbc第二天0326 DAO模式 事务操作

  • DAO:Data Access Object
    • DAO起着转换器的作用
      • 把实体类转换为数据库中的记录
      • java代码中的90、研发部、青岛等等信息都在内存中,计算机重启,数据丢失
      • Dept d = new Dept();
      • d.setDeptno(90);
      • d.setDname("研发部");
      • d.setLoc("青岛");
      • 为了把数据长久保存起来,需要把数据写入数据库、文件、云,这个过程叫做数据持久化
    • DAO操作步骤
      • 1、新建com.neuedu.dao包
      • 2、dao中定义数据表dept对应的实体类Dept
      • 3、dao中定义操作实体类Dept的接口DeptDao
      • 4、dao中定义实体类DeptDaoImpl实现接口DeptDao
      • 5、DeptDaoImpl中完成各方法
    • Service操作步骤
      • 1、新建com.neuedu.service包
      • 2、service中定义操作实体类Dept的业务层接口DeptService
      • 3、service中定义实体类DeptServiceImpl实现接口DeptService
      • 4、DeptServiceImpl中完成业务方法
  • 事务操作
    • 例题:用户a给用户b转账100元
      • public boolean transfer(int a,int b, int money) {}
      • 过程分析:1给a扣款;2给b打款;3事件1事件2要么都成功,要么都失败,事务
      • try {
        • conn = DbUtil.getConn();
        • // 1、默认情况下,事务自动提交,需要修改事务为手动提交
        • conn.setAutoCommit(false);
        • // 2、执行业务1:给用户1扣款
        • // 3、执行业务2:用户2打款
        • // 4、业务1、业务2全部操作成功,提交事务
        • conn.commit();
      • } catch (Exception e) {
        • e.printStackTrace();
        • // 4业务1、业务2出现问题,回滚事务
        • conn.rollback();
      • }
      • https://paste.ubuntu.com/p/jt9C8vhQ2x/

 

public boolean transfer(int fEmpno, int tEmpno, int tsSal) {
		Connection conn = DbUtil.getConn();
		PreparedStatement pstm = null;
		PreparedStatement pstm1 = null;
		try {
			conn.setAutoCommit(false);
			
			String sql = " update emp set sal = sal - ? where empno = ?; ";
			pstm = conn.prepareStatement(sql);
			pstm.setObject(1, tsSal);
			pstm.setObject(2, fEmpno);
			int n1 = pstm.executeUpdate();
			
			sql = " update emp set sal = sal + ? where empno = ?; ";
			pstm1 = conn.prepareStatement(sql);
			pstm1.setObject(1, tsSal);
			pstm1.setObject(2, tEmpno);
			int n2 = pstm1.executeUpdate();
			
			conn.commit();
			
			return n1 + n2 > 0;
			
		} catch (Exception ex) {
			ex.printStackTrace();
			try {
				conn.rollback();
			} catch (SQLException es) {
				es.printStackTrace();
			}
			return false;
		} finally {
			DbUtil.close(conn, pstm, null);
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值