因为本次项目是政府项目,所以数据库服务器采用SQLServer2000,我真是抗议了好长时间呀,让Java和微软的产品协同工作真是太令人发狂,SQLServer2000也不令人失望,总是搞出点问题来阻挠项目进度。
1.项目中持久层采用Hibernate,本希望能通过Hibernate这种好称可以在任何主流数据库上移植代码的东东摆平SQLServer。配置文件都写在applicationContext 中,是为了Spring来控制Hiberante的事务,大体上配置并没有出什么问题。
但是SQLServer2000毕竟是有点落伍的产品,当时支撑的服务器是WindowsServer2003,死活的无法打开连接,好在一同事曾经用过,当时在企业管理器上做了一些修改才得以远程连接控制SQLSERVER,但是此同事3天后就离职,至今不知道他当时做了些什么,好在后来这个问题没有再发生(如果再发生后果不堪设想……)。
具体的解决方法好像是创建一个新的用户给项目使用,并且设定相应可控制的数据表和权限,这些都是微软的那种傻瓜式配置,有一份用户手册就足以应付。
2.接下来我在做连接测试的时候又发现 无法打开连接,一直抛一个错误,具体错误已经记不大清楚了,后来在网上查到在Windows Server2003上使用SQLServer2000必须将其升级为SP4以上版本,否则无法打开1433端口,升级结束,果然好用了。
3.在项目开发的过程中发现微软提供的JDBC驱动居然不能支持一些关联查询,好像还有其他的问题,结果中途被迫更换使用第三方驱动jtds,再次强化我反微软的决心!
4.由于SQLServer没有采用标准的SQL语法,而是自己的一套TransactionSQL,也为数据库维护带来极大不便,起初根本无法进行创建表操作。后来老大求助一位强人,他带来了PowerDesign,在其中进行了表结构设计,令人惊奇的发现PowerDesign可以生成SqlScript,而且还可以按照不同的数据库生成不同的SQL(当时第一次见到PD这个牛X的工具,难免有点土包子),让很多复杂的表结构和烦人的SQL语句问题都迎刃而解,开心ing
5.在习惯了使用PD以后,就很少自己去写SQL,顶多自己写写Select之类的东西,大任务都是用PD或者查询企业管理器,因为后来还出现了对存储过程和任务调度的需求,远远超出我这个数据库菜鸟的能力范围。PD虽然使用很方便,还提供表结构和持久化对象的转换,但是在进行数据表设计时还是要小心,不能那么为所欲为的使用表关联,有很多关联看上去很有用,觉得写上去是很合乎业务逻辑,但是到了业务实现的时候就发现那些关联不是那么好操纵的,所以在设计表结构的时候一定要想清楚很多复杂关联能否简化,项目组成员是否具备解决这么复杂处理的问题,如果到项目开发中期才发现这个问题,那结果就会跟我一样…… 我当时对Hibernate处理映射相当不熟练,结果无奈之下将表的结构进行了重新设计和简化,工作量是可想而知的,呜……
6.今天在网上和网友聊天的时候他出现一个问题,有关Hiberante使用查询select * from table的问题,以前刚玩Hibernate的时候不懂,只知道Hibernate是按照对象进行映射的,所以被迷惑着,以为Hibernate取出来的东西必定是按照对象映射关系。今天在帮他解决这个问题的时候突然想到,如果是那样的话,为什么使用select distinct(*)为什么会返回一个包含字串的对象数组呢? 于是做了一个简单的测试,跟跟断点,发现在使用select id form table 这种命令的时候,Hibernate是将结果返回对象数组并存放在list中返回,难怪以前使用其映射对象cast的时候老是报错,这回这个问题终于想通了,以后又可以节省一些代码,估计也能提高一点效率吧 :P。这个问题关键是走出一个误区,我估计很多人都是有那个错误的想法,至少我身边的同事和一些网友都是这么认为,结果遇到ClassCastException的时候摸不到头脑。也许看看源码一下子就解决的问题结果被困扰很久甚至走弯路,看来我们需要养成阅读源码寻找问题根源的习惯。
7.上周在项目中和同事研究一个分页的问题,当时项目紧,我手头没有相关资料,于是自己写了个分页的东东,庆幸在使用中没有太大的问题。其中分页的思路是封装一个包含页信息的对象传到Dao层,然后使用QBC进行检索再返回结果。其中有一个处理就是必须获得查询结果的总条数,当时没有时间去考虑方法,后来也没能想到解决办法,就直接使用criteria.list().size()直接将结果先全部查询一遍,直到项目交工的时候还用TODO注解为Bad performance。我同事说这个解决办法性能低的要死哦,我只能无奈的摊摊手。但是新项目数据量可没那么温柔,如果还使用这个分页可就麻烦大了,怎么办?为了一个总页数重新写方法? 因为书上说只有HQL才支持聚集函数。后来得到网友的帮助,才得以解决,方法是在查询总数的时候增加一个设定:
criteria.setProjections(Projections.count().uniqueResult()); 然后在criteria.list(),打印SQL语句果然执行了select count(*),不知道性能提高多少个百分点,爽!
这里面要注意两个地方,一是使用了uniqueResult(),因为select count(*) 明显是一条结果,那么使用uniqueResult()也是一种简化代码和提高效率的方法。二是由于criteria被更改,接下来的分页查询就无法正确进行了,所以需要在分页查询之前增加一段代码 criteria.setProjections(null) ,将其置空,查询正常进行。
分享到:
相关推荐
SSH是Java开发中的一种经典企业级应用框架组合,由Spring、Hibernate和Struts2组成,分别负责控制层、持久层和表现层。Spring是整个应用的核心,提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,极大地简化了...
开发者可以通过这个DEMO学习到如何在实际项目中运用Struts2的Action和Result,Spring的依赖注入和事务管理,Hibernate的ORM机制,以及ExtJS的组件和数据绑定。同时,它也揭示了现代Web开发中前后端分离的趋势,通过...
总的来说,"Struts2+Hiberante+ajax+Mysql 三级联动"项目展示了如何利用这些技术进行高效的Web开发,特别是在处理多级交互和动态数据展示方面。通过学习和实践这样的项目,开发者可以提升对Java Web开发的理解,尤其...
Struts2.0、Spring2.0、Hibernate3和DWR以及Freemarker是Java Web开发中的关键组件,它们各自负责不同的职责,并且通过合理的整合,可以构建出强大的企业级应用系统。 Struts2.0是Apache软件基金会下的一个开源MVC...
总结来说,这个项目展示了如何将Java后端框架(Struts2、Hibernate、Spring)与前端JavaScript库(ExtJS)结合,以构建一个高效、功能完善的OA办公系统。对于Java开发者来说,深入理解和掌握这些技术有助于提升其在...
本项目基于Struts2.0、Spring2.0和Hibernate3.0,提供了SSH2的实践案例,便于开发者学习和理解。 **Struts2.0** Struts2是一个开源的MVC(Model-View-Controller)框架,它是Struts1的升级版,引入了更多现代Web...
《疯狂Ajax讲义3》是针对Web开发领域中Ajax技术的深入学习资料,结合Spring和Hibernate两大框架,为读者提供...通过阅读《疯狂Ajax讲义3+Spring+hiberante》,你将能够掌握这一现代Web开发技术栈,提升自己的专业技能。
总的来说,"经典struts+hiberante+spring课件"涉及的知识点主要包括Java Web开发中的Struts、Hibernate和Spring三大框架的原理和使用,以及相关的Servlet和JavaBeans概念。学习这些内容,开发者可以构建出高效、可...
在IT领域,这组资料涵盖了三个关键的技术:Ajax、Spring和Hibernate,这些都是Web开发中的重要组成部分。让我们深入探讨一下这些技术及其在实际应用中的重要性。 首先,Ajax(Asynchronous JavaScript and XML)是...
"疯狂Ajax讲义5+Spring+hiberante" 这个标题和描述暗示了我们即将探讨的主题是关于Web开发中的三个关键技术和框架:Ajax、Spring和Hibernate。Ajax(Asynchronous JavaScript and XML)是一种用于创建动态网页的技术...
3. **HQL和SQL**:Hibernate Query Language(HQL)是面向对象的查询语言,类似于SQL,但更接近于Java对象的语义。 4. **缓存机制**:Hibernate支持一级缓存(Session缓存)和二级缓存(可选),以提高数据访问性能...
这个"Struts2.2.3+hiberante3.2+spring2.5整合小项目"就是基于这种集成构建的一个应用实例,主要用于实现对数据库的增删改查功能,并且具备导出数据到Excel的功能。 首先,Struts2是经典的MVC(Model-View-...
SSH框架整合是Java Web开发中的常见实践,SSH指的是Struts2、Spring和Hibernate这三个开源框架的首字母缩写。这个例子展示了如何将Hibernate3.3.1、Spring2.5.5和Struts2 2.0.1.2集成到一个项目中,以实现高效、灵活...
详细讲述通过Struts2+hiberante+Spring+ExtJs实现的实例说明,包括S2SH环境搭建和开发的过程,有详细的开发步骤说明,包括通用基类,事务等关键地方的讲解,图文并茂,适合初中级学习者
Struts2、Hibernate3.5和Spring3.0是Java Web开发中的三个核心框架,它们在权限管理中扮演着重要角色。这篇详细说明将深入探讨这三个框架如何协同工作,以及如何利用注解(Annotation)来简化配置。 Struts2是一个...
Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用,它提供了模型-视图-控制器(MVC)架构模式,使得开发者能够更高效地处理 Web 请求。Hibernate 是一个强大的对象关系映射(ORM)框架,它简化了数据库...
Struts2.1.8+Spring3.0+Hibernate3.3.2+DWR2.0.6 是一个经典的Java Web开发框架组合,通常被称为SSH2或S2SH+DWR。这个组合在过去的几年里被广泛使用,因为它们各自在应用程序的不同层面上提供了强大的功能。 **...
Struts2、Hibernate和Spring是Java开发中常用的三个开源框架,它们各自负责应用程序的不同层面:Struts2专注于MVC(模型-视图-控制器)架构的实现,提供强大的请求处理和展示逻辑;Hibernate则是一个对象关系映射...
这个压缩包"Struts2 Spring Hiberante IBatis jar (1)"包含了这些框架的部分jar文件,可能是为了简化开发环境的配置或提供一个基础的开发库。 1. **Struts2**: 是一个基于MVC(Model-View-Controller)设计模式的...