操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
4. 说下Hibernate的缓存机制
1. 一级缓存session缓存属于应用事物级缓存 不同session之间不能共享数据,默认开启
2. 二级缓存:sessionFactory 缓存,输入数据库级别缓存,多个session共享的数据,默认是关闭的 a) 应用及缓存 b) 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据
c) 第三方缓存的实现,可以直接使用 ehcache/jbosscache/oscache/swarmcache hibernate3.3.2之前,ehcache已经集成
5. Hibernate的查询方式
Sql、Criteria,object comptosition
Hql:
1、 属性查询
2、 参数查询、命名参数查询
3、 关联查询
4、 分页查询
5、 统计函数
6、 Hibernate有哪几种查询数据的方式
(1)导航对象图查询 (2)OID查询 (3)HQL (4)QBC
(5)本地SQL
7. 如何优化Hibernate?
1、使用双向一对多关联,不使用单向一对多 2、灵活使用单向一对多关联 3、不用一对一,用多对一取代 4、配置对象缓存,不使用集合缓存
5、一对多集合使用Bag,多对多集合使用set 6、继承类使用显示多态
7、表字段要少,表关联不要怕多,有二级缓存撑腰
三、Struts
Struts框架本身是使用Java Servlet和JSP技术的一种Model-View-Controller(MVC)实现。
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 1. Struts工作流程
1.1 struts2 工作流程
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等
(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器
(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.
(6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.
(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)
(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器. (9) 最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.
Struts2 在web应用的位置图示:
负责处理接收用户数据,调用业务处理,以及展示数据的工作
1.2 Struts2 : ActionContext
ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放放的是Action在执行时需要用到的对象,比如:在使用WebWork时,我们的上下文放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。
在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样我的Action就可以在多线程中使用。
下面我们看看怎么通过ActionContext取得我们的HttpSession: Map session = ActionContext.getContext().getSession();
原来我们取得的session却是Map类型的对象, WebWork框架将与Web相关的很多对象重新进行了包装,比如这里就将HttpSession对象重新包装成了一个
Map对象,供我们的Action使用,而不用直接和底层的HttpSession打交道。也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。
ServletActionContext(com.opensymphony.webwork. ServletActionContext),直接继承了ActionContext,它提供了直接与JavaServlet相关对象访问的功能, 获取的对象有:
1、javax.servlet.http.HttpServletRequest:HTTPservlet请求对象 2、javax.servlet.http.HttpServletResponse;:HTTPservlet响应对象 3、javax.servlet.ServletContext:Servlet 上下文信息 4、javax.servlet.ServletConfig:Servlet配置对象 5、javax.servlet.jsp.PageContext:Http页面上下文
ServletActionContext除了提供了上面这些对象访问,它当然也继承了它父类ActionContex的很多功能,比如:对OgnlValueStack、Action名字等的访问。
1、取得HttpServletRequest对象:
HttpServletRequest request = ServletActionContext. getRequest(); 2、取得HttpSession对象:
HttpSession session = ServletActionContext. getRequest().getSession();
1.3 Struts1.x的工作流程:
对于采用Struts框架的Web应用,在Web应用启动(发布)时就会加载并初始化ActionServlet,ActionContext等内容。ActionServlet从struts- config.xml文件中读取配置信息,把它们存放到各种配置对象中,例如Action的映射信息存放在ActionMapping对象中。
当ActionServlet接受到一个客户请求时(HttpRequest),将执行如下流程。 (1)检查和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据封装到ActionForm对象中。
(3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
(4)如果ActionForm的validate()方法返回null或返回一个不包含