##DAO模式与JavaBean
DAO数据库操作对象(Data Access Object):负责连接数据库,通过集合获取数据库中的数据,对数据进行CRUD的操作。
DAO出现之前,操作数据库的代码与业务代码都出现在JSP或Servlet中,不利于业务代码的分离。DAO出现后改变了这一情况,所有与数据库相关的操作都被拿到了DAO层实现,Servlet或JSP中只操作JavaBean与DAO层,而DAO只操作数据库。
##事务实例:转账
张三转200元到李四的银行账户,李四要买英雄联盟皮肤。
要分两个步骤:
一:从张三账户中减去200元
二:在李四账户中加上200元
一个无事务的方法(步骤正常)
一个无事务的方法(步骤异常:后面的步骤有错,断电)
一个有事务的方法(步骤正常)
一个无事务的方法(步骤异常:后面的步骤有错,断电)
代码:
getConnection();
conn.setAutoCommit(false); //停用自动提交事务
...
int result2 = pStmt.executeUpdate();
System.out.println(“李四账户存入200元,结果:"+(result2==1?"成功":"失败"));
if(result1==1 && result2==1){ //扣款、充值都成功
conn.commit();
System.out.println("转账成功,事务提交。");
}else{
conn.rollback();
System.out.println("转账失败,事务回滚。");
}
##抛出异常自动回滚
设置自动提交为false后,事务的提交必须执行conn.commit(),而事务的回滚不一定要显示的执行conn.rollback(),如果程序最后没有执行conn.commit(),事务也会回滚,一般是要直接抛出异常,终止本段程序的正常运行。
如下:
if(result1!=1 || result2!=1){
throw new Exception("数据更新失败。");
}
conn.commit();
##数据源(连接池)
在先前的JDBC编程中,每操作一次数据库,都要经过下面的过程:创建Connection、创建Statement对象、获取ResultSet、销毁ResultSet、销毁Statement、断开Connection。即每操作一次数据库,都会创建连接、断开连接。
在实际的使用中,创建和断开Connection都会消耗一定的时间、IO资源,在大量的并发访问时尤其明显 。而企业级的开发需要高效快速的连接处理。为避免频繁的创建、断开数据库连接,可以使用数据源技术。