学习主题:OA系统
学习目标:
1 掌握web开发项目实战,熟练使用web开发基础技术
对应作业
1. 报销管理-添加报销单-业务层
(1) 在报销主表和明细表中都有一个字段叫expid,这个字段在数据库中是利用序列获取的,但是在业务层中,我们要控制主表和明细表的expid一致,所以要先获取expid赋值给主表和明细表,那么这个expid的值怎么得到呢?
1. 首先在数据库添加序列(第一个:数据单,第二个:数据单项)
2. 在MyEclipse中先获取数据库中的下一个序列的值(seq_exp.nextval)
3. 然后将值添加在数据单对应的数据单Id中.
2. 报销管理-添加报销单-DAO层代码
(1) 在我们的逻辑中,要向主表添加数据,要向明细表添加数据,但是假如在向明细表添加数据的过程中,出现异常了,那么程序就中断了,但是主表的数据被添加进去了,这个问题要怎么解决呢?
原因:一个DML操作一个事务,事务在Dao层,这就被分为了多个事务,而不是一个,
解决:将多个操作视为一个事务,此时事务要从Dao层提升到业务层.
(2) 在我们目前的代码中,当添加明细出现问题的时候,页面还是会跳转到添加成功页面,这个问题怎么解决呢?
原因: 这是因为DBUtil中出现异常以后没有抛出.
解决: 在DBUtil.java中捕捉到的异常抛出即可.
(3) 现在的代码中,会出现另一个问题:主表数据添加成功,明细表数据添加失败,但是这些操作肯定是要么都成功,要么都失败的,那么这个问题怎么解决呢?
和问题一是一个问题.
3. 报销管理-使用ThreadLocal实现业务层事务1
(1) 说明ThreadLocal的作用?
在ThreadLocal中存入connection对象.这样就可以在业务层对业务进行回滚.
ThreadLocal中的一个对象被一个线程共享,一次用户请求,共用一个Connection对象.
4. 报销管理-使用ThreadLocal实现业务层事务2
(1) 如何保证DBUtils工具类中getConnection方法获取到的Connection对象是一个呢?
把Connection对象存放在ThreadLocal中就可以了.
(2) 在DBUtils中是否要将Connection关闭呢?那要在什么时候关闭?
在业务层中关闭Connection对象,不要再Dao层关闭.
5. 报销管理-待审报销单
(1) 简述待审报销的思路?
1. 获取登录人的ID.
2. 从数据库获取查询上级Id为登录人的报销单,然后显示在网页中
(2) 如何查询的下一级审批人是不是当前登录人的信息?
比较empId和mgrId看查是否相等.