传智播客java学习--OA机构设计

今天是学习oa的第二天,学的知识点比较多,我做了笔记:

 

Service层设计:

    1,先有get(Long),因为还想要获取其他对象(不是T),所以再定义一个get(Class, Long)

2, 为什么有get(Class, Long),但不加上以下两个方法呢?

<E> E delete(Class<E> clazz, Long id);

<E> List<E> findAll(Class<E> clazz);

可以加上,但是在程序中只使用到了get(Class, Long),所以就只定义了get方法。

3,为什么使用Long型的主键呢?也可以使用Serializable类型,因为Session.get()方法就是接受这个类型。

 

包  资源(类、接口等)

cn.itcast.oa.service.daosupport ServiceBase(原名为DaoBase)

ServiceImplBase(原名为DaoBaseImpl)

cn.itcast.oa.service Service的接口

Cn.itcast.oa.service.impl   Service的实现类

 

说明: Service接口可以通过继承ServiceBase得到增删改查的方法声明。Service的实现类可以通过继承ServiceImplBase得到增删改查方法的实现。通过ServiceImplBase中的getSession()与getJbpmContext()方法可以方便的获得Session与JbpmContext。

 

使用反射获取类型参数的真实类型的代码如下:

    public DaoBaseImpl () {

       Type type = this.getClass().getGenericSuperclass();

       ParameterizedType pt = (ParameterizedType) type;

       this.clazz = (Class<T>) pt.getActualTypeArguments()[0];

    }  

 

事务管理:

    使用过滤器加 ThreadLocal 实现

因为Session可以通过JbpmContext.getSession()获得,所以只需管理 JbpmContext即可;过滤器拦截*.do的请求。

 

一个请求(线程)使用同一个JbpmContext 如果请求中没有使用JbpmContext或Session,就不要创建JbpmContext。

在过滤器中关闭JbpmContext时,也要调用 ThreadLocal.remove(),因为Web容器有线程池,就是两次请求有可能是使用的同一个线程。

JbpmContextFilter中的相关代码:

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {

 

    try {

       chain.doFilter(request, response);

    } catch (Exception e) {

JbpmContext jc = JbpmContextUtils.getJbpmContext(false);

    if (jc != null) {

       jc.setRollbackOnly();

    }

    throw new ServletException(e);

    } finally {

JbpmContextUtils.closeAndRemoveCurrentJbpmContext();

    }

}

 

 

每个业务方法是做一件事,应使用同一个事务

 

1, 一个请求是一个线程

2, Web容器有线程池,所以先后的两次请求,有可能使用的是同一个线程

 

1.  JbpmContextUtils

2.    JbpmContextFilter

 

解决提交的表单内容的中文乱码:

       所有的页面都将使用utf-8编码,所以提交的表单内容也是utf-8编码。

在过滤器中设置request的编码为utf-8:

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

       request.setCharacterEncoding("utf-8");

       chain.doFilter(request, response);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值