ssh里面项目,使用jdbcTemplate和直接使用hibernate hql 查询的增删改查或者hql或者QBC?

我的开发规范分享(二)- 禁用Hibernate HQL,QBC,QBE编程(1)讨论第3页:
- Hibernate - Java - ITeye论坛
我的开发规范分享(二)- 禁用Hibernate HQL,QBC,QBE编程(1)
锁定老帖子
精华帖 (0) :: 良好帖 (3) :: 新手帖 (19) :: 隐藏帖 (0)
来自: 苏州
发表时间:&&
其实就是禁用hibernate,还这么复杂搞个禁用HQL。像生成报表之类的复杂查询,我想JDBC都不适用。
请登录后投票
raymond2006k
来自: 杭州
发表时间:&&
melode11 写道用named sql query还用什么hibernate...
另外,hibernate的文档中提到了,hibernate是对并发处理非常好的框架,在[高并发]和[合理使用]的情况下,性能可以达到jdbc的水平。
named sql query 本身也是 Hibernate 的一个的特性。
请登录后投票
duobin3000
等级: 初级会员
来自: 上海
发表时间:&&
看了你的帖子,我有点莫名的郁闷,你都做到了架构设计了,难道还不了解hibernate和原生sql的关系吗?
他们解决问题的方式是不同的:
hibernate:一方面是让你用OO的思想去思考问题 ;另一个方面是说我不是为了优化sql,而是采用缓存,提高命中率,减少DB的访问
而SQL,不一样,它是面向DB的,优化SQL等方式提高DB的性能,这个是他的职责。
从这个文章来看,电信真是烂
请登录后投票
raymond2006k
来自: 杭州
发表时间:&&
ziyuan 写道ibatis完全符合lz的需求,,why not try it
&& 同意你,我在公司项目中制定这个开发规范正符合 ibatis 的特点。
&& 因为 2006年项目启动时,已经确定使用 Hibernate 3, 而公司以前编程规范是使用 HQL, QBC 的 , 正好那次在项目初期对Hibernate 这一使用规范逐渐纠正过来。
如果是新的项目, 我想我会选 ibatis 的。
请登录后投票
raymond2006k
来自: 杭州
发表时间:&&
duobin3000 写道看了你的帖子,我有点莫名的郁闷,你都做到了架构设计了,难道还不了解hibernate和原生sql的关系吗?
他们解决问题的方式是不同的:
hibernate:一方面是让你用OO的思想去思考问题 ;另一个方面是说我不是为了优化sql,而是采用缓存,提高命中率,减少DB的访问
而SQL,不一样,它是面向DB的,优化SQL等方式提高DB的性能,这个是他的职责。
从这个文章来看,电信真是烂
& 话不要说这么绝对。Named SQL Query本身也是Hibernate 的一个特性,千万不要将它和& Hibernate 对立起来。 (这是我 2006 年确定的 Hibernate 使用的规范。)
& 如果你面对的是新项目,你这样说完全 OK。
& 如果是一个 2006年 已经确定用 Hibernate 的项目, 在项目初期遇到复杂查询业务,不知你会怎样处理开发和选型的问题? 
& 在理论 hibernate 和 sql 有你所说的区别; 但在实际项目中, 你可以看看情况是怎样的;你只看到 sql 面向DB,而没注意业务的复杂性; 我不相信你只用 Hibernate 的 OO 在一个项目里就能搞定所有业务需求。
&& 还是感觉很多朋友只是教条的坚持每个技术的标准特点和规范,不能做适当变通。
&& 本文分享出来,正是给使用 Hibernate 的兄弟提供一个实践经验的参考。
请登录后投票
来自: 杭州
发表时间:&&
面对复杂的查询,或者说关联的表稍微多一点,hql生成的sql就会有半个屏幕,确实感觉不是很舒服啊
请登录后投票
tibetjungle
来自: 西北的狼
发表时间:&&
weizh 写道其实就是禁用hibernate,还这么复杂搞个禁用HQL。像生成报表之类的复杂查询,我想JDBC都不适用。
对,我们系统现在使用的100多个报表,现在都用存储过程做。一方面是业务规则比较复杂,一方面是考虑复杂的sql在效率方面会有问题,而且难以优化。
请登录后投票
来自: 上海
发表时间:&&
我恰恰相反,我认为使用hibernate要尽量使用HQL。对于复杂查询我们引入jdbctemplate就可以了。
请登录后投票
raymond2006k
来自: 杭州
发表时间:&&
tibetjungle 写道weizh 写道其实就是禁用hibernate,还这么复杂搞个禁用HQL。像生成报表之类的复杂查询,我想JDBC都不适用。
对,我们系统现在使用的100多个报表,现在都用存储过程做。一方面是业务规则比较复杂,一方面是考虑复杂的sql在效率方面会有问题,而且难以优化。
最佳实践有多种,Store Procedure 也是一种我们以前使用过的方式,而且Hibernate 对此也是支持的。如果能充分结合 Hibernate Cache功能,这也是一个不错的方案,只要你们定下一个规范就可以了。
请登录后投票
发表时间:&&
我认为电信级别的项目不适合用hibernate,新手用好hibernate可不是件容易的事,一个项中开发规范和技术架构很很重要.
请登录后投票
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术我做ssh项目的时候,用hql查询出一个list,然后我在action中打印出来居然是..._百度知道
我做ssh项目的时候,用hql查询出一个list,然后我在action中打印出来居然是...
我做ssh项目的时候,用hql查询出一个list,然后我在action中打印出来居然是个类的路径,类似于:com.ssh.book.model@加个乱码,而这个类名就是hibernate影射创建的类,让我百思不得其解。请高手赐教!我该怎么做?
提问者采纳
你打印的是类实体,不能直接调用System.out.println(),要将List里面的实体逐个调用相关的get方法才能做打印,另外,如果想全部打印可通过反射实现。
提问者评价
谢谢,3楼那个list.toString不行。试了下Arrays.toString也不能对list进行。不过还是谢谢大家
其他类似问题
为您推荐:
hql的相关知识
其他2条回答
直接打印一个list是打印出这个list的内存路径,而不是list 的具体内容,想要打印出具体内容,按照楼上的,循环打印!
试试 System.out.println(yourArrayList.toString());或者遍历那个list循环输出,LIST或者ArrayList直接打印是不会出来你想要的结果的!
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁刚学SSH,有个问题就是HQL是否全部写在DAO层,而service层 不体现 HQL?
[问题点数:20分,结帖人l5038814]
刚学SSH,有个问题就是HQL是否全部写在DAO层,而service层 不体现 HQL?
[问题点数:20分,结帖人l5038814]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2014年12月 扩充话题大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。我的开发规范分享(二)- 禁用Hibernate HQL,QBC,QBE编程(1) - Raymond的Java世界 - ITeye技术网站
博客分类:
【START 修改日志 当天 22:12 】:本文主要是针对基于Hibernate框架的项目开发中复杂查询的最佳实践。分析了前几个网友的意见,我想在几个基本方面hibernate QBC,QBE还是很方便的:
1) 单表简单查询(基于字段的等值查询, 全部And运算)时,简单的汇总,如count等。
2) 全动态查询条件, QBE很方便。
【END 修改日志
当天 22:12 】
【START 修改日志
21:20】:
[quote="ziyuan"] ibatis完全符合lz的需求,,why not try it[/quote]
同意你,我在公司项目中制定这个开发规范正符合 ibatis 的特点, 不过 Hibernate 对其也提供了完全的支持, 这两者在该功能上是一样的。
因为 2006年项目启动时,已经确定使用 Hibernate 3, 而公司以前编程规范是使用 HQL, QBC 的 , 正好那次在项目初期对Hibernate 这一使用规范逐渐纠
如果是新的项目, 我想 ibatis 也是可以考虑的方案。【START 修改日志
2006年公司电信项目启动时,项目组选择沿用使用已久 的Hibernate及开发规范做 ORM方案。 做为公司新的电信项目的架构师一员,根据一直以来的项目经验,在项目进行2月后,面对复杂查询业务陆续增多,原有以Hibernate HQL,QBC 为特点的开发规范有些无法很好满足需求。
因此在分析复杂查询业务 及 Hibernate 的特性特点, 我为 Hibernate 开发时制定了一个规范:禁用 HQL,QBC,QBE编程, 有三个要点,对于非单表的简单查询:
1)程序员不得在Java代码中直接使用HQL;
2)不得进行HQL拼装;
3) 不得在 hbm.xml 映射文件中使用named HQL query。
该规范按重要程度 基于四个方面的考虑:业务复杂度,程序员开发效率,维护难度和执行性能。
规范要求在 Hibernate 的 hbm.xml
文件配置Named SQL Query 来进行这些功能的开发。
项目中我们对其进行了适当的易用性改造,关于我们项目中Named SQL如何具体应用,见下一篇分享:我的开发规范分享(二)- 禁用Hibernate HQL,QBC,QBE编程(2)
1. HQL,QBC:
今天写这个分享短文,源于前几天回覆网友icewubin 的帖子: ,主要是Hibernate查询的几种使用方式:HQL,QBC,QBE。
先说 QBC,QBE,例如:(Hibernate QBC 示例代码)
public List&Product& getProducts(Product product) {
final Example exampleProduct =
Example.create(product).
enableLike(MatchMode.ANYWHERE).
excludeZeroes();
return (List&Product&) getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria crit =session.createCriteria(Product.class).
add(exampleProduct);
return crit.list();
或例如:(Hibernate QBC 构造查询条件示例代码)
Restrictions.ne(propertyName, propertyValue);
crit = Restrictions.gt(propertyName, propertyValue);
crit = Restrictions.lt(propertyName, propertyValue);
2 ORM框架下复杂查询的处理
几年前,我使用另一个ORM框架Ofbiz, 它的QBC,QBE与Hibernate类似,而且条件构造的类库更为完善. 当时使用过JDBC编程的我也对这种纯Java的,优雅的查询编程吸引,折服(当然这种思想确实是大牛们的伟大创新), QBC,QBE对单表,简单查询条件,两表关联查询支持很好.
然而当项目设计完毕,进入开发阶段后,我们发现,这种查询开发模式遇到了瓶颈. 因为当时项目是财务系统,业务比较复杂, 多表关联查询,汇总查询,子查询等复杂查询陆续涌来. QBC,QBE的不足马上体现出现. 为此项目组对此类业务不得不用改用native sql来开发, 为与Ofbiz的ORM思想保持统一, 以配置sql为数据源的实体成为虚拟实体(Virtual Entity), 虚拟实体同样在映射文件中配置. 这个对Ofbiz的封装和改造,马上发挥用途,项目顺利,流畅的推进了。
3. 我们的项目规范:禁用 HQL,QBC,QBE编程
回到我们的2006年启动的电信项目,使用的是Hibernate,它增加了HQL,以OO的方式写查询语句,也是牛人Gavin King的力作。但与Ofbiz类似,它对多表关联查询,汇总查询,子查询,三者混合查询的支持依然不足。作为新任架构师经过对公司之前架构规范分析,及一番思考,决定使用Hibernate时的一个规范:禁用 HQL,QBC,QBE编程。
在项目开发规范中,我对这个规范进行了要点分析和总结。
HQL,QBC开发的缺点:
1) Java代码和查询语言混合开发,没有分离,易读性,维护性差;
2) HQL编写和调试困难,对于较为复杂的查询,通常需要转化为SQL进行调试,调试完毕又要转为HQL,转换过程需要对HQL有较好的理解,但容易出错,开发时间长;
3) QBC 编码量多,开发慢,易读性,维护性差;
4) HQL,QBC功能有限,前面提到的多表关联查询,汇总查询,子查询,三者混合查询支持不佳或无法支持。相信朋友们都遇到过类似的需求。
5) 还有一个考虑就是性能问题,有的HQL被Hibernate内部组装为SQL后,可能存在性能隐患,如果修改的话比较麻烦。
复杂查询的解决方案
解决方案仍然是,在hbm.xml 文件中配置named sql query。Ibatis 也有类似功能。
例子1:查询指定模块的所有下级模块, Hibernate 能将查询结果自动和 ModuleVO 映射起来
&!-- 查询指定模块的所有下级模块 --&
&sql-query name="system.module.queryAllSubModules"&
module.MODULE_CODE as MODULECODE,
module.MODULE_NAME as MODULENAME,
module.MODULE_TYPE as MODULETYPE,
module.PARENT_CODE as PARENTCODE,
module.MODULE_DESC as MODULEDESC,
module.MODULE_URI
as MODULEURI,
module.MODULE_VIEW as MODULEVIEW
select t.child_code, t.offset from sys_module_rela t
where t.ancestor_code = :parentCode
) m1 join sys_module module
on m1.child_code = module.module_code
order by parent_code, module_order
&/sql-query&
例子2:以判断操作员是否对某个URI有访问权限为例, 返回值 val 大于0时表示有权限:
&sql-query name="system.perm.hasURIPermisson"&
&return-scalar column="val" type="java.lang.Integer"/&
select count(1) val from sys_module module ,
select distinct p.module_code from sys_oper_perm op , sys_perm p
op.oper_id = :oprcode and op.perm_code = p.perm_code )
module.module_code = op.module_code
module.module_uri = :currentURI
&/sql-query&
我们项目中的Java代码的调用就更为简单了:
* 检查指定工号对 web请求 uri是否有权限。
* @param oprcode
* @param currentURI
* @throws Exception
public boolean doCheckURIPermission(String oprcode, String currentURI) throws Exception {
PermDAO dao = (PermDAO) DAOFactory.build(PermDAO.class,user);
Param param = new Param();
param.getQueryConditions().put("oprcode", oprcode);
//设置固定参数 :oprcode
param.getQueryConditions().put("currentURI", currentURI); //设置固定参数 :currentURI
Integer count = (Integer)dao.queryUniqueByNamedSqlQuery("system.perm.hasURIPermisson", param);
return count.intValue() & 0;
而如果使用HQL,估计很难实现;
使用QBC查询,至少需要2-3步,代码较多,并且可能或查出冗余数据, 影响应用性能。
named sql 的优点和上面HQL,QBC的缺点正好相反:
1) Java 代码和查询语句分离,易读性好,维护性好;
2) 使用原生 SQL 开发,调试简便。如果是oracle,在pl/sql中进行调试,修改快捷而高效;
3) 原生 SQL功能自然不必说,它是最全的。复杂的业务如果它都支持不了,那就得歇菜了。
4) 充分发挥 DBMS 本身特定sql 语法的特性。
5. 跨数据库问题
在和网友icewubin 的讨论中,有一个问题值得说一说:跨数据库问题。他的意思是使用HQL,QBC可以保持数据库通用,这是他们的项目需求。实际上,我们当初的项目也是要求跨数据库的。解决方法是,针对Oracle,DB2,Informix等客户可能用到的db专门做sql调整, 也就是有两个DB的 sql 实现,(当时为新客户调整到DB2 sql,也就花了一周时间)。
这个方案与Oracle BPEL等产品一样,例如:改产品出厂时,有针对不同数据库的DDL脚本文件,一个道理。
Named SQL在我们项目中的具体应用。
我们对其进行了适当的易用性改造,关于我们项目中Named SQL如何具体应用,要工作了,呵呵。下一篇分享文章,再聊. 我的开发规范分享(二)- 禁用Hibernate HQL,QBC,QBE编程(2)
论坛回复 /
(55 / 24720)
yanghuw 写道
简单查询HQL,复杂查询sql-query
upheart 写道很想知道,如果一个查询条件是动态的,比如根据用户输入的查询条件来构造,那这种方案怎么做?
&&& 动态条件可以通过Where子句来判断条件,比如你需要查询订单,订单号的条件是可选的,你可以在查询语句中这么写:ORDERNO is null OR o.ORDERNO=:ORDERNO,这种方式和if-else一样,如果条件为空就判断下一个条件,不为空就比较条件,就是效率会稍微差一点
沒必要這麼做, iBATIS里有判斷null值的標籤.
在iBATIS手册第48页
Checks the equality of a property and a value, or another property.
Checks the inequality of a property and a value, or another property.
Checks if a property is greater than a value or another property.
Checks if a property is greater than or equal to a value or another property.
Checks if a property is less than a value or another property.
Checks if a property is less than or equal to a value or another property.
Checks if a property is available (i.e is a property of the parameter bean)
Checks if a property is unavailable (i.e not a property of the parameter bean)
Checks if a property is null.
Checks if a property is not null.
Checks to see if the value of a Collection, String or String.valueOf() property is null or empty (&& or size() & 1).
Checks to see if the value of a Collection, String or String.valueOf() property is not null and not empty (&& or size() & 1).
是啊,问题是感觉就是在用iBATIS的标签写这类判断逻辑?这样做合适么?逻辑一复杂,可维护性就不好了,又得不到IDE强大重构的帮助。
很想知道,如果一个查询条件是动态的,比如根据用户输入的查询条件来构造,那这种方案怎么做?
还是要编写 查询语句 增加判断~~
我觉得楼主是在真正分析问题,后面回复的有很多只是简单地唱反调,因为他们拥护Hibernate~~!
我同意楼主在这样特定的需求条件下做出的Hibernate规范决策,当然,我也建议楼主可以转型使用iBatis,你的需求用iBatis会比Hibernate更适合。
现在Hibernate新版本中增加了些对SQL的自由定制支持,说明G.K还是知道这些问题的。如果Hibernate的NamingSQL能支持像iBatis那样的动态条件拼装那就OK了,只是目前没有这种功能。
另外,许多人说这是OO思想还是关系思想的对立问题,我到不这么认为,从性能角度上讲,两个层面都需要做优化,并且需要从架构层面考量的,并不是简单的一、两级Cache就万事大吉了。
如果是我,在面对这种动态条件拼装频繁的项目前提下,我也会选择使用iBatis,除非Hibernate下一个版本增加了动态拼装的功能。
当然,话又说回来,万事都不是绝对的,如果从纯性能的角度上来看,有些多表关联查询有可能只仅仅是简单的动态拼装也未必适用,因为不同的条件其优化后的SQL语句是不同的,需要走不同的执行路径,这个数据库密切相关。
有许多人认为用Hibernate就可以不用理解SQL了,我不认为是这样的,Hibernate只是一个工具,代替不了SQL,开发人员本身就应该编写SQL的责任,只不过不需要太过深入,高级的、棘手的优化工作DBA可以帮助你完成。
最后,我现在就是Hibernate+iBatis整合起来在用,如果再启一个全新的项目,在Hibernate没有对动态拼支持以前,我还会选择iBatis.& 作为架构小组的一员,可不是选好 framework,把官方文档给 程序员 就完事了。
就事论事,大家可别攻击我。。。
哈哈,终于找到知音了。&&&&
实际上我在公司的JavaEE 框架中已经完善的封装了动态拼装附加条件 SQL 的功能,并且用法比 Hibernate, ibatis 本身更为简单,算是一个增强扩展包。&
只是本文是该主题的第一部分, 提出了问题, 下篇会详细介绍这一增强扩展的用法和实现原理。最近比较忙,一直没时间整理。&&
难得碰到以解决问题为道的知音,再次& 一下。以后多交流。
hibernate都用不好,还说个P呀
我经常听别人说hibernate很简单,但这样的人10个有9个不行,莫非你是这唯一的例外?
那是你们公司特定的环境下的规定,像我们公司的产品必须要跨数据库,就肯定不能用named sql。
很多情况下,为了避免重复需要动态拼sql(hql),这部分的逻辑总得有个地方要放,我不认为放在配置文件中是个好主意,比如iBatis中的判断逻辑判断语法,配置文件和代码文件应该同等对待,都是代码,IDE对配置文件的感知能力是远不如代码文件的。
Java代码根据规范,组织好分层和代码的规范,一样可以分离开发,提高易读性和改进维护难度。
相反,配置文件的规模(行数和文件数和配置文件中的逻辑判断)达到一定程度一样是问题,本质上来讲这个复杂度是不可避免的,你总得找个地方放这些逻辑,不管是在代码、配置文件、存储过程,都一样的。
icewubin 写道过于复杂的查询本来就不应该用同样的框架去做。
1.首先从商务上,我们公司会把这方面的需求转到BI上来做,数据仓库部门和数据挖掘部门是我们公司比较强的地方。
2.如果复杂度没有到BI这一层面的话,或者说必须要用Java来做的话,统计报表本来就应该单独设计,至于这部分的实现是不是用Hql还是本地sql可以另讨论,但是不要把统计报表类的需求延展到其他事务操作型的需求上。
3.我们的产品正好没有什么统计报表的需求,我也建议统计报表类的需求实现单独讨论比较好。
1.楼主就是一个电信的统计报表类项目,没必要说成是“电信级”项目吧。
2.Hibernate使用是需要相关配套设施的,比如如何把很多多表查询转换成单表查询,牵涉到整个框架的设计和支撑。
3.制定规范的时候,不知道楼主自己是不是经常参与开发实践,我虽然制定公司架构,但是自己一直是在一线和程序员们一起参与的(不会过多参与,不然瓶颈就在我身上了),要多了解使用框架和规范的程序员们的想法。
4.从楼主举的例子来看,好像数据库设计的不是特别好,因为资料不多,我也不好多说,但是那个子查询的例子,建议用exists实现。
5.hibernate本质上来说就是个高级的sql生成器+各种辅助设施。在设计系统的时候,大脑中浮现出来的当然是只有sql了,核心问题就是如何管好这些sql,不管是存储过程、ibatis、hibernate都是sql的拼装、构造的过程,然后就是评估拼装、构造的逻辑代码放在哪里更好的决策,仅此而已,不需要上纲上线。
6.很多人说jdbcTemplate好,我也经常用,是很好用,不过最好也看看它的整体结构,用的不好也会出性能问题。
EXvision 写道恭喜lz将hibernate成功转变成ibatis。
不会用不要瞎用。
ibatis适合你。
大牛老兄,如果你教条的认为用 HQL,QBC 才是 Hibernate 正统, 用 Named SQL Query 就不是在用 Hibernate ,那我也没话说,哈哈。
或者你个给个 Hibernate下 复杂查询的解决例子吧。
或者谈谈你所谓的“不瞎用”吧。
我觉得复杂查询,用ibatis得了。
hibernate和ibatis混用是完全可以的。
或者用jdcbtemplate也可以,抛开hibernate吧。
对于业务逻辑的处理hibernate还是很好的。
我要抛弃hibernate,决定用ibatis之类的东西了。
不是hibernate不好,而是hibernate太深了,我玩不转,我觉得我再用几年也精通不了。
要做一个让人放心的业务系统,需要对hibernate非常熟悉,把hibernate用好才能做出来。
看看周边的情况,基本都是菜鸟在用 hibernate,做了几年的菜鸟在教新手如何用hibernate。
老板、售前、实施、项目经理都在叫:不就是增删改查吗?要有多简单就有多简单!
不知道gigix,抛出异常的爱等大牛们用不用hibernate,出来说句话吧。
& 上一页 1
raymond2006k
浏览: 177225 次
来自: 杭州
楼主你是逗逼么,像你这样比较,直接被气死了
网上关于coherence的资料太少了,刚刚入手学习,感谢楼主 ...
不得不说,可能博主自己觉得这样做很牛逼了。但是你忘了依赖注入的 ...
为什么不告诉我们要导入的包?你做截屏的时候顺道包impor ...
现在办理社保转移好像没有当年这么麻烦了,国家出台了新的法律了。 ...一个客户管理系统,是JAVA SSH框架的,不知道怎么在DAO层对数据库中表进行增、删、查、改操作_百度知道
一个客户管理系统,是JAVA SSH框架的,不知道怎么在DAO层对数据库中表进行增、删、查、改操作
表名是 TCustContact。最好是具体的代码,SQL语句,谢谢!
提问者采纳
java ssh de 项目一般都是三层实现的,需要根据这里给你一个模板代码,用hibernate一般一HQL足够用,复杂的多表查询需要Sql的话用回调,这个是例子@Override public List&Lizi& findByCriter(final String hql) {
// TODO Auto-generated method stub
return (List&Lizi&) super.getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
//Query q=session.createQuery(hql);
Criteria cri= session.createCriteria(Lizi.class);
System.out.println(hql);
List q= cri.add(Restrictions.sqlRestriction(hql)).list();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
); }---下面是一般的模板import java.util.Limport mons.logging.Limport mons.logging.LogFimport org.hibernate.LockMimport org.springframework.context.ApplicationCimport org.springframework.orm.hibernate3.support.HibernateDaoSpublic class GL_JBBDAOImpl extends HibernateDaoSupport implements GL_JBBDAO { private static final Log log = LogFactory.getLog(GL_JBBDAOImpl.class);public void save(GL_JBB transientInstance) {
log.debug(&saving GL_JBB instance&);
getHibernateTemplate().save(transientInstance);
log.debug(&save successful&);
} catch (RuntimeException re) {
log.error(&save failed&, re);
} }public void delete(GL_JBB persistentInstance) {
log.debug(&deleting GL_JBB instance&);
getHibernateTemplate().delete(persistentInstance);
log.debug(&delete successful&);
} catch (RuntimeException re) {
log.error(&delete failed&, re);
} }public GL_JBB findById(java.lang.String id) {
log.debug(&getting GL_JBB instance with id: & + id);
GL_JBB instance = (GL_JBB) getHibernateTemplate().get(
&com.zljy.basisset.entity.GL_JBB&, id);
} catch (RuntimeException re) {
log.error(&get failed&, re);
} }public List findByProperty(String propertyName, Object value) {
log.debug(&finding GL_JBB instance with property: & + propertyName
+ &, value: & + value);
String queryString = &from GL_JBB as model where model.&
+ propertyName + &= ?&;
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re) {
log.error(&find by property name failed&, re);
} }public void attachDirty(GL_JBB instance) {
log.debug(&attaching dirty GL_JBB instance&);
getHibernateTemplate().saveOrUpdate(instance);
log.debug(&attach successful&);
} catch (RuntimeException re) {
log.error(&attach failed&, re);
} }public static GL_JBBDAOImpl getFromApplicationContext(ApplicationContext ctx) {
return (GL_JBBDAOImpl) ctx.getBean(&GL_JBBDAO&); }
提问者评价
谢谢哈!正愁着呢.....及时雨呀!
其他类似问题
如果使用ssh的话就简单多啦~~直接使用hibernate提供的方法对数据库进行增删改查让dao层继承HibernateDaoSupport,然后可以用getHibernateTemplate().delete();删getHibernateTemplate().load();查getHibernateTemplate().save();增getHibernateTemplate().updata();改
为您推荐:
其他3条回答
对应的应该有TCustContact这个实体类TCustContactDao这个类,这个类extends HibernateDaoSupport然后在TCustContactDao里就可以得到session执行hql了public List&TCustContact& list() {
return getSession().createQuery(“from TCustContact”).list(); }
可以依靠Baiduhi告诉我们有机会能够处理你所遇到的工作具体的要求也能够告诉我们ES:\\810FD8D7B65CE4C5CFBD3
要看你的SSH框架怎么搭的,还有你的VO怎么建的,如果VO是用工具反转,并且会用HibernateDaoSupport的话,这个就很简单了,直接用继承HIbernateDaoSupport,调用父类的getHibernateTemplate()的增删改查方法就可以了,查询用Hibernate的HQL就可以了
ssh框架的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 hibernate update hql 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信