就业班_JavaEE_day19_20_事务_分页
一 事务
1 connection必须关闭。
2 多个逻辑操作使用同一个connection
3 dbutils处理事务有另外一套API。 update(conn,sql,params), 带conn的方法dbutils不会去关闭connection。
4 事务在service层进行处理。模板代码如下:
try{
beginTransaction();
dao.xxx();
dao.yyy();
commitAndCloseConn();
}catch(Exception e){
rollbackAndCloseConn();
}
5 通过ThreadLocal来实现每个线程中共享同一个connnection。因为servlet是以多线程的方式对外提供服务。即每次访问都是一个新线程。
通过ThreadLocal将Connection与当前线程进行绑定。 在其它地方需要用时,通过 get() 方式获取即可。
ThreadLocal 是一个key-value结构,key是当前线程对象。set(x) set方法默认以当前线程对象为key取出value。
Hibernate即通过这种方式来实现事务的操作。
二 商品的crud和分页
1 分页: currentPage totalPage totalCount pageSize
2 条件查询 : pname
可以将分页和组合条件查询整体进行封装。
3 重复提交产生的原因
1:添加或者修改后 转发回查询页面,刷新会重复提交
2:在网速慢的情况下,用户多次点击提交按钮。
重复提交的解决方式:
1 一次性令牌机制 (token)在生成添加页面是生成UUID 并将UUID保存在session中,当添加后,将session中的remove。
2 添加或者修改后,不做转发而是做重定向。
4 一个表单通过多个按钮或者超链接,提交到不同的地址 。
通过js修改form的action属性和method的隐藏属性。
表单提交的方法 submit()
按钮上添加js 通常采用 <input type="button" value="">
超链接上添加js 通常采用 <a href="javascript:change()" >xxxxxx</a>
|