Jun
20
业务场景,Department和Employee是一对多关系。现在我对Department进行分页查询,要求在显示的页面上同时显示每个Department中Employee的数量。这是一个很简单的业务场景,但是想象一下如何用hibernate进行映射?
首先否定一种做法:hql:FROM Department department。然后针对每个department,去做department.getEmployees().size()。这样不仅会发送n+1条SQL,而且性能太低。
我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。
首先否定一种做法:hql:FROM Department department。然后针对每个department,去做department.getEmployees().size()。这样不仅会发送n+1条SQL,而且性能太低。
我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。
Jun
18
1. 在struts-config.xml里,以插件的形式
xml 代码
这种方式如果没有配置contextConfigLocation的值,则会自动加载xx-servlet.xml.
xx的值是和web.xml里的配置org.apache.struts.action.ActionServlet的servlet-name的值一样
如下:xx的值也就是 action,所以会自动加载action-servlet.xml
xml 代码
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
这种方式如果没有配置contextConfigLocation的值,则会自动加载xx-servlet.xml.
xx的值是和web.xml里的配置org.apache.struts.action.ActionServlet的servlet-name的值一样
如下:xx的值也就是 action,所以会自动加载action-servlet.xml
Jun
16
Session 接口:
Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate 中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session 对象,如果Session 的开销太大,会给系统带来不良影响。但值得注意的是Session 对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。
在Hibernate 的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate 的session不同于JSP应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate 中的session,而我们以后会将HttpSesion 对象称为用户session。
Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate 中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session 对象,如果Session 的开销太大,会给系统带来不良影响。但值得注意的是Session 对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。
在Hibernate 的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate 的session不同于JSP应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate 中的session,而我们以后会将HttpSesion 对象称为用户session。
Jun
13
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。
一,servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
一,servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
Jun
12
Jun
11
缺省适配器模式和模板方法模式。
缺省适配器模式:当一个接口有很都方法时,所有的实现类都需要实现该接口的所有方法。即使不需要的方法也需要空实现。这时就需要一个适配器类。该适配器类主要是实现该接口的所有方法(一般都空实现)。给真正的子类带来方便。
模板方法模式:父类定义了几个方法。并规定了这几个方法的具体执行流程(哪个方法先执行,哪个方法后执行),然后其子类实现这些方法。
缺省适配器模式:当一个接口有很都方法时,所有的实现类都需要实现该接口的所有方法。即使不需要的方法也需要空实现。这时就需要一个适配器类。该适配器类主要是实现该接口的所有方法(一般都空实现)。给真正的子类带来方便。
模板方法模式:父类定义了几个方法。并规定了这几个方法的具体执行流程(哪个方法先执行,哪个方法后执行),然后其子类实现这些方法。
Jun
10






