- 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中完成业务方法
- DAO起着转换器的作用
- 事务操作
- 例题:用户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/
- 例题:用户a给用户b转账100元
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);
}
}