- 浏览: 212274 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (107)
- java网络通信(rmi,hessian,nio...) (4)
- java基础 (25)
- java压缩和解压缩 (1)
- 开发框架整合 (7)
- struts2.0 (3)
- 构建工具(ant,maven..) (1)
- web容器配置(tomcat,weblogic,nginx...) (3)
- hibernate (8)
- 业务(项目管理,项目设计相关) (5)
- 数据库(oracle,mysql..) (7)
- linux命令 (6)
- java网络通信(rmi (6)
- hessian (6)
- nio...) (6)
- 数据库(oracle (4)
- mysql..) (4)
- ibatis (2)
- 多线程 (1)
- Windows Install Clean Up 卸载JDK (1)
- IETEST (1)
- UML 类图 关系 (1)
- java基础 spring (2)
- NFS SFU (1)
- jmap mat jps (1)
- 架构 (1)
- 统一管理 (0)
- 项目管理 (1)
- 图片预加载 (1)
- 代码高亮 (1)
- 同步 (1)
- 权限管理 (0)
- ehcache ibatis (1)
- jd-gui proguard (1)
- portmon (1)
- procexp (1)
- mysql (1)
- NIO 内存映射文件 (1)
- web容器配置(tomcat (1)
- weblogic (1)
- nginx...) (1)
- WEB (1)
- html (1)
- javascript (1)
- iOS pods (1)
最新评论
-
vrbvillor:
我的QQ是245614005。如果您可以帮我的话,请发邮件或联 ...
mysql存储过程中使用动态SQL,并且返回值 -
vrbvillor:
大侠,请教一个问题。我想在mysql的function里边 ...
mysql存储过程中使用动态SQL,并且返回值 -
newslxw:
ppgunjack 写道关键要弄清楚,UAT用例是谁提供,谁评 ...
做到客户满意为止(项目成本控制相关主题) -
萧十一狼:
所有dao类都继承com.ibatis.sqlmap.clie ...
spring+ibatis整合方法 -
adss101:
一般项目就这块比较难控制,,弄不好就死在这了,,客户要求,对于 ...
做到客户满意为止(项目成本控制相关主题)
首先,我并不是一个hibernate开发的推崇者,也不精通hibernate,只是在某几个项目上用到了hibernate,下面是我的感受:
1、lazy加载,经常带来问题
2、级联保存常带来问题,所以我开发是都不用级联保存
3、主键的native要求主键使用number类型,给设计带来麻烦
4、很多人开发是不设计表结构,而是用hibernate来生产数据库,对维护带来很多影响
5、处理复杂SQL,还是需要用SQL而不能用HQL,导致语言混杂,增加维护成本
6、大数据量时,很容易出现问题
7、不适合新人使用,项目中往往有工作经验较低的人,使用hibernate往往容易出错
我对持久层框架要求很简单:
1、自动POJO到数据,或者数据库到POJO
2、适度缓存
如果不是项目要求,我更倾向选择ibatis。
貌似用得起付费Oracle或者DB2的企业,都是不可能轻易换掉软件的DB的,甚至连版本都不敢换,Hibernate在中小型产品类应用上还有一些用武之地。
我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement
先搞清楚概念:存储过程是在数据库中写,不在jdbc或者ibatis中写;CallStatement也不是写存储过程,只是调用存储过程。还有,是CallableStatement,而不是CallStatement。
具体实现我们自己对jdbc访问存储过程进行了封装,通过反射与泛型,定义好了存储过程入口对象与返回对象,自动完成对对象的封装。
我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement
深表赞同!很多连左右关联能干什么都不知道。都写了几年代码了。
很怀疑他以前的系统能否查出正确的记录数。
你那个问题应该是struts+hibernate集成的时候(或类似的框架集成),在控制器中关闭了hibernate的session,而后在页面中你又要迭代对象集合,结果对象集合中的A对象包含了B对象的实体在被访问的时候出现了session关闭的问题,不知是不是这样理解的?这个问题产生的根源其实你去想想程序执行的流程就可以了,用spring,用filter都可以解决这个问题。
1、lazy加载,经常带来问题
2、级联保存常带来问题,所以我开发是都不用级联保存
3、主键的native要求主键使用number类型,给设计带来麻烦
4、很多人开发是不设计表结构,而是用hibernate来生产数据库,对维护带来很多影响
5、处理复杂SQL,还是需要用SQL而不能用HQL,导致语言混杂,增加维护成本
6、大数据量时,很容易出现问题
7、不适合新人使用,项目中往往有工作经验较低的人,使用hibernate往往容易出错
我对持久层框架要求很简单:
1、自动POJO到数据,或者数据库到POJO
2、适度缓存
如果不是项目要求,我更倾向选择ibatis。
评论
67 楼
beyondqinghua
2011-04-27
同过表设计简化HQL,而不是一味的写复杂的SQL语句。
66 楼
xiaotot
2011-04-27
楼上
如果是从mysql升级到sqlserver 呢?
如果是从mysql升级到sqlserver 呢?
65 楼
george_space
2011-04-27
xiaotot 写道
貌似没有一个人提到了数据库迁移的问题
如果你的系统跟数据库耦合度这么高,
人家从oracle要更换到DB2,
你的代码修改量会有多大?
还有,hb只是一个持久层的架构,
我看大家讨论的东西,感觉大家把hb都过多的参与到逻辑层,
额...
让我有种把裤衩当帽子感觉,虽然能戴上,
可是他看起来很别扭,甚至很恶心
一个系统框架,仅仅靠ssh,来搭建起来,
其他的地方逻辑架构混乱,
就跟只有一个房架,没打地基一样
还有感觉大家都太过依赖于数据库的计算而放弃了程序的计算
有一些逻辑运算,可以放到程序之中,来做一些解耦
有一些大幅度的运算可以构建视图或者存储过程,
为什么有了HB就想把所有的东西都放在hb里面呢?
如果你的系统跟数据库耦合度这么高,
人家从oracle要更换到DB2,
你的代码修改量会有多大?
还有,hb只是一个持久层的架构,
我看大家讨论的东西,感觉大家把hb都过多的参与到逻辑层,
额...
让我有种把裤衩当帽子感觉,虽然能戴上,
可是他看起来很别扭,甚至很恶心
一个系统框架,仅仅靠ssh,来搭建起来,
其他的地方逻辑架构混乱,
就跟只有一个房架,没打地基一样
还有感觉大家都太过依赖于数据库的计算而放弃了程序的计算
有一些逻辑运算,可以放到程序之中,来做一些解耦
有一些大幅度的运算可以构建视图或者存储过程,
为什么有了HB就想把所有的东西都放在hb里面呢?
貌似用得起付费Oracle或者DB2的企业,都是不可能轻易换掉软件的DB的,甚至连版本都不敢换,Hibernate在中小型产品类应用上还有一些用武之地。
64 楼
xiaotot
2011-04-27
貌似没有一个人提到了数据库迁移的问题
如果你的系统跟数据库耦合度这么高,
人家从oracle要更换到DB2,
你的代码修改量会有多大?
还有,hb只是一个持久层的架构,
我看大家讨论的东西,感觉大家把hb都过多的参与到逻辑层,
额...
让我有种把裤衩当帽子感觉,虽然能戴上,
可是他看起来很别扭,甚至很恶心
一个系统框架,仅仅靠ssh,来搭建起来,
其他的地方逻辑架构混乱,
就跟只有一个房架,没打地基一样
还有感觉大家都太过依赖于数据库的计算而放弃了程序的计算
有一些逻辑运算,可以放到程序之中,来做一些解耦
有一些大幅度的运算可以构建视图或者存储过程,
为什么有了HB就想把所有的东西都放在hb里面呢?
还有一点,你是吧hb当核心了还是把hb当工具了呢?
如果你的系统跟数据库耦合度这么高,
人家从oracle要更换到DB2,
你的代码修改量会有多大?
还有,hb只是一个持久层的架构,
我看大家讨论的东西,感觉大家把hb都过多的参与到逻辑层,
额...
让我有种把裤衩当帽子感觉,虽然能戴上,
可是他看起来很别扭,甚至很恶心
一个系统框架,仅仅靠ssh,来搭建起来,
其他的地方逻辑架构混乱,
就跟只有一个房架,没打地基一样
还有感觉大家都太过依赖于数据库的计算而放弃了程序的计算
有一些逻辑运算,可以放到程序之中,来做一些解耦
有一些大幅度的运算可以构建视图或者存储过程,
为什么有了HB就想把所有的东西都放在hb里面呢?
还有一点,你是吧hb当核心了还是把hb当工具了呢?
63 楼
抛出异常的爱
2011-04-27
我一直认为hibernate是个比较好用的特性缓存
对于大量数据运算的统计报表,hibernate没什么优点
对于大量数据运算的统计报表,hibernate没什么优点
62 楼
gtandsn
2011-04-27
我觉得LZ应该是对hibernate不是很清楚才会这样,毕竟一个东西有好的一面也有它不好的一面,所有的都是有利有弊的,要看自已怎么用了
61 楼
buydzyj
2011-04-27
caomeiliang 写道
buydzyj 写道
hibernate不适合业务逻辑复杂的系统
请问这样的存储过程如何用Hql实现?
请问这样的存储过程如何用Hql实现?
我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement
先搞清楚概念:存储过程是在数据库中写,不在jdbc或者ibatis中写;CallStatement也不是写存储过程,只是调用存储过程。还有,是CallableStatement,而不是CallStatement。
具体实现我们自己对jdbc访问存储过程进行了封装,通过反射与泛型,定义好了存储过程入口对象与返回对象,自动完成对对象的封装。
60 楼
jingua1026
2011-04-27
你们这些N人为何要老钻牛角尖呢?技术都是为业务服务的,能解决问题就行,并不是说用了hibernate就连sql都不用了,那你用数据库做啥呢?
59 楼
caomeiliang
2011-04-27
buydzyj 写道
hibernate不适合业务逻辑复杂的系统
固然hibernate可以使用原生的SQL,可以访问存储过程。但是,一旦使用原生的SQL或者是访问存储过程,再使用hibernate不是脱裤子放屁,多此一举么?
我们做的一个系统,业务逻辑复杂,都是使用ibatis或者是jdbctemplate访问存储过程来实现,举个例子如下:
CREATE PROCEDURE P_ts_kc_zwh
@qxdh char(2)
As
set nocount on
update syk set tszwh = '' where qxdh=@qxdh
declare @kddhi char(4), @id int, @spc int, @wpc int, @ksrs int, @spci int, @wpci int
declare @zrsi int, @wrsi int, @mpcrs int, @mrs1 int, @mrs2 int, @mrs3 int, @kddh char(4)
declare @pci int, @szh char(10), @wzh char(10), @jdh char(10), @rsi int, @bxdh char(4)
declare @zwhi int, @bzwh int, @wjdh bigint, @kchi int
set @kddhi = ''
set @wpci = 0
set @spci = 0
declare cur_kwk cursor for
select id,kddh,spc,wpc,ksrs from tskwk where left(kddh,2)=@qxdh order by kddh,spc,wpc,bxdh,szh
open cur_kwk
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
while @@fetch_status = 0
begin
if @kddh <> @kddhi or @spc <> @wpci
begin
set @kddhi = @kddh
set @spci = @spc
set @zrsi = 0
set @wrsi = 0
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4 from tskdk where kddh=@kddh
end
set @wpci = @wpc
update tskwk set bzwh = @wrsi+1 where id=@id
set @zrsi = @zrsi + @ksrs
set @wrsi = @zrsi - (@wpci-@spci)*@mpcrs
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,ksrs,bzwh,szh,wzh from tskwk where left(kddh,2)=@qxdh and szh<>''
order by kddh,spc,wpc,szh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @bzwh<=@mrs1 then @bzwh when @bzwh<=@mrs2 then @bzwh-@mrs1
when @bzwh<=@mrs3 then @bzwh-@mrs2 else @bzwh-@mrs3 end
declare cur_syk cursor for select jdh from syk where jdh>=@szh and jdh<=@wzh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,bxdh,ksrs,bzwh from tskwk
where left(kddh,2)=@qxdh and szh=space(10) order by kddh,spc,wpc,bxdh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @rsi<=@mrs1 then @rsi when @rsi<=@mrs2 then @rsi-@mrs1
when @rsi<=@mrs3 then @rsi-@mrs2 else @rsi-@mrs3 end
declare cur_syk cursor for select jdh from syk where bxdh=@bxdh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0 --and @ksrs>0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
end
close cur_kwk
deallocate cur_kwk
set nocount off
GO
请问这样的存储过程如何用Hql实现?
固然hibernate可以使用原生的SQL,可以访问存储过程。但是,一旦使用原生的SQL或者是访问存储过程,再使用hibernate不是脱裤子放屁,多此一举么?
我们做的一个系统,业务逻辑复杂,都是使用ibatis或者是jdbctemplate访问存储过程来实现,举个例子如下:
CREATE PROCEDURE P_ts_kc_zwh
@qxdh char(2)
As
set nocount on
update syk set tszwh = '' where qxdh=@qxdh
declare @kddhi char(4), @id int, @spc int, @wpc int, @ksrs int, @spci int, @wpci int
declare @zrsi int, @wrsi int, @mpcrs int, @mrs1 int, @mrs2 int, @mrs3 int, @kddh char(4)
declare @pci int, @szh char(10), @wzh char(10), @jdh char(10), @rsi int, @bxdh char(4)
declare @zwhi int, @bzwh int, @wjdh bigint, @kchi int
set @kddhi = ''
set @wpci = 0
set @spci = 0
declare cur_kwk cursor for
select id,kddh,spc,wpc,ksrs from tskwk where left(kddh,2)=@qxdh order by kddh,spc,wpc,bxdh,szh
open cur_kwk
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
while @@fetch_status = 0
begin
if @kddh <> @kddhi or @spc <> @wpci
begin
set @kddhi = @kddh
set @spci = @spc
set @zrsi = 0
set @wrsi = 0
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4 from tskdk where kddh=@kddh
end
set @wpci = @wpc
update tskwk set bzwh = @wrsi+1 where id=@id
set @zrsi = @zrsi + @ksrs
set @wrsi = @zrsi - (@wpci-@spci)*@mpcrs
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,ksrs,bzwh,szh,wzh from tskwk where left(kddh,2)=@qxdh and szh<>''
order by kddh,spc,wpc,szh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @bzwh<=@mrs1 then @bzwh when @bzwh<=@mrs2 then @bzwh-@mrs1
when @bzwh<=@mrs3 then @bzwh-@mrs2 else @bzwh-@mrs3 end
declare cur_syk cursor for select jdh from syk where jdh>=@szh and jdh<=@wzh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,bxdh,ksrs,bzwh from tskwk
where left(kddh,2)=@qxdh and szh=space(10) order by kddh,spc,wpc,bxdh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @rsi<=@mrs1 then @rsi when @rsi<=@mrs2 then @rsi-@mrs1
when @rsi<=@mrs3 then @rsi-@mrs2 else @rsi-@mrs3 end
declare cur_syk cursor for select jdh from syk where bxdh=@bxdh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0 --and @ksrs>0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
end
close cur_kwk
deallocate cur_kwk
set nocount off
GO
请问这样的存储过程如何用Hql实现?
我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement
58 楼
gdfloyd
2011-04-26
查询前X位最XX的,复杂如报表的数据展示查询需求,用Hibernate的hql简直是自虐。
一般的数据查询,Hibernate的作用就是一个自动类型转换器而已。很多时候把Hibernate当成mapping工具使用,不见得比其他类似的framework优越多少。当业务逻缉处理没有达到复杂并且大量的程度到可以抽象出来形成可重用的单元,用Hibernate往往还不如sql开个事务来处理方便直接。
一旦发现业务逻缉都累积在一个connection事务方法里面,再来审视是否需要重构吧~~~~
清晰的业务逻缉处理层次,带来代码结构的清爽,是Hibernate诸如ORM工具给我们最大的好处。当然代价是有的...
某人说,ORM重点在O,不在M...
一般的数据查询,Hibernate的作用就是一个自动类型转换器而已。很多时候把Hibernate当成mapping工具使用,不见得比其他类似的framework优越多少。当业务逻缉处理没有达到复杂并且大量的程度到可以抽象出来形成可重用的单元,用Hibernate往往还不如sql开个事务来处理方便直接。
一旦发现业务逻缉都累积在一个connection事务方法里面,再来审视是否需要重构吧~~~~
清晰的业务逻缉处理层次,带来代码结构的清爽,是Hibernate诸如ORM工具给我们最大的好处。当然代价是有的...
某人说,ORM重点在O,不在M...
57 楼
xiaoyuqi00
2011-04-26
hibernate 用起来确实有难度
56 楼
junfengcode
2011-04-26
作为一个只会jdbc和hibernate的人来说,压力很大
55 楼
joliny
2011-04-26
buydzyj 写道
我有个同学在orcale工作,他说:hibernate的流行,是因为现在程序员的数据库基本功大部分太差了
深表赞同!很多连左右关联能干什么都不知道。都写了几年代码了。
很怀疑他以前的系统能否查出正确的记录数。
54 楼
szcs10138456
2011-04-26
吸取各自的精华才是取胜之道~!
53 楼
wdhdd889
2011-04-26
楼主像是在抱怨啊
不习惯用就不要用
用自己擅长的就好了
不习惯用就不要用
用自己擅长的就好了
52 楼
crazyRookie
2011-04-26
在一些地理信息的字段映射时,HEBERNATE就不给力了
51 楼
buydzyj
2011-04-26
我有个同学在orcale工作,他说:hibernate的流行,是因为现在程序员的数据库基本功大部分太差了
50 楼
buydzyj
2011-04-26
hibernate不适合业务逻辑复杂的系统
固然hibernate可以使用原生的SQL,可以访问存储过程。但是,一旦使用原生的SQL或者是访问存储过程,再使用hibernate不是脱裤子放屁,多此一举么?
我们做的一个系统,业务逻辑复杂,都是使用ibatis或者是jdbctemplate访问存储过程来实现,举个例子如下:
CREATE PROCEDURE P_ts_kc_zwh
@qxdh char(2)
As
set nocount on
update syk set tszwh = '' where qxdh=@qxdh
declare @kddhi char(4), @id int, @spc int, @wpc int, @ksrs int, @spci int, @wpci int
declare @zrsi int, @wrsi int, @mpcrs int, @mrs1 int, @mrs2 int, @mrs3 int, @kddh char(4)
declare @pci int, @szh char(10), @wzh char(10), @jdh char(10), @rsi int, @bxdh char(4)
declare @zwhi int, @bzwh int, @wjdh bigint, @kchi int
set @kddhi = ''
set @wpci = 0
set @spci = 0
declare cur_kwk cursor for
select id,kddh,spc,wpc,ksrs from tskwk where left(kddh,2)=@qxdh order by kddh,spc,wpc,bxdh,szh
open cur_kwk
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
while @@fetch_status = 0
begin
if @kddh <> @kddhi or @spc <> @wpci
begin
set @kddhi = @kddh
set @spci = @spc
set @zrsi = 0
set @wrsi = 0
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4 from tskdk where kddh=@kddh
end
set @wpci = @wpc
update tskwk set bzwh = @wrsi+1 where id=@id
set @zrsi = @zrsi + @ksrs
set @wrsi = @zrsi - (@wpci-@spci)*@mpcrs
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,ksrs,bzwh,szh,wzh from tskwk where left(kddh,2)=@qxdh and szh<>''
order by kddh,spc,wpc,szh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @bzwh<=@mrs1 then @bzwh when @bzwh<=@mrs2 then @bzwh-@mrs1
when @bzwh<=@mrs3 then @bzwh-@mrs2 else @bzwh-@mrs3 end
declare cur_syk cursor for select jdh from syk where jdh>=@szh and jdh<=@wzh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,bxdh,ksrs,bzwh from tskwk
where left(kddh,2)=@qxdh and szh=space(10) order by kddh,spc,wpc,bxdh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @rsi<=@mrs1 then @rsi when @rsi<=@mrs2 then @rsi-@mrs1
when @rsi<=@mrs3 then @rsi-@mrs2 else @rsi-@mrs3 end
declare cur_syk cursor for select jdh from syk where bxdh=@bxdh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0 --and @ksrs>0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
end
close cur_kwk
deallocate cur_kwk
set nocount off
GO
请问这样的存储过程如何用Hql实现?
固然hibernate可以使用原生的SQL,可以访问存储过程。但是,一旦使用原生的SQL或者是访问存储过程,再使用hibernate不是脱裤子放屁,多此一举么?
我们做的一个系统,业务逻辑复杂,都是使用ibatis或者是jdbctemplate访问存储过程来实现,举个例子如下:
CREATE PROCEDURE P_ts_kc_zwh
@qxdh char(2)
As
set nocount on
update syk set tszwh = '' where qxdh=@qxdh
declare @kddhi char(4), @id int, @spc int, @wpc int, @ksrs int, @spci int, @wpci int
declare @zrsi int, @wrsi int, @mpcrs int, @mrs1 int, @mrs2 int, @mrs3 int, @kddh char(4)
declare @pci int, @szh char(10), @wzh char(10), @jdh char(10), @rsi int, @bxdh char(4)
declare @zwhi int, @bzwh int, @wjdh bigint, @kchi int
set @kddhi = ''
set @wpci = 0
set @spci = 0
declare cur_kwk cursor for
select id,kddh,spc,wpc,ksrs from tskwk where left(kddh,2)=@qxdh order by kddh,spc,wpc,bxdh,szh
open cur_kwk
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
while @@fetch_status = 0
begin
if @kddh <> @kddhi or @spc <> @wpci
begin
set @kddhi = @kddh
set @spci = @spc
set @zrsi = 0
set @wrsi = 0
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4 from tskdk where kddh=@kddh
end
set @wpci = @wpc
update tskwk set bzwh = @wrsi+1 where id=@id
set @zrsi = @zrsi + @ksrs
set @wrsi = @zrsi - (@wpci-@spci)*@mpcrs
fetch next from cur_kwk into @id,@kddh,@spc,@wpc,@ksrs
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,ksrs,bzwh,szh,wzh from tskwk where left(kddh,2)=@qxdh and szh<>''
order by kddh,spc,wpc,szh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @bzwh<=@mrs1 then @bzwh when @bzwh<=@mrs2 then @bzwh-@mrs1
when @bzwh<=@mrs3 then @bzwh-@mrs2 else @bzwh-@mrs3 end
declare cur_syk cursor for select jdh from syk where jdh>=@szh and jdh<=@wzh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@ksrs,@bzwh,@szh,@wzh
end
close cur_kwk
deallocate cur_kwk
declare cur_kwk cursor for select kddh,spc,bxdh,ksrs,bzwh from tskwk
where left(kddh,2)=@qxdh and szh=space(10) order by kddh,spc,wpc,bxdh
open cur_kwk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
while @@fetch_status = 0
begin
select @mpcrs=ksrs1+ksrs2+ksrs3+ksrs4,@mrs1=ksrs1,@mrs2=ksrs1+ksrs2,@mrs3=ksrs1+ksrs2+ksrs3 from tskdk where kddh=@kddh
set @pci = @spc
set @rsi = @bzwh
set @zwhi = case when @rsi<=@mrs1 then @rsi when @rsi<=@mrs2 then @rsi-@mrs1
when @rsi<=@mrs3 then @rsi-@mrs2 else @rsi-@mrs3 end
declare cur_syk cursor for select jdh from syk where bxdh=@bxdh and tszwh='' and jf_ts='1'
order by bjh,jdh
open cur_syk
fetch next from cur_syk into @jdh
while @@fetch_status = 0 --and @ksrs>0
begin
if @rsi > @mpcrs
begin
set @pci = @pci + 1
set @rsi = 1
set @zwhi = 1
end
set @kchi = case when @rsi<=@mrs1 then 1 when @rsi<=@mrs2 then 2
when @rsi<=@mrs3 then 3 else 4 end
update syk set tszwh=@kddh+right('0'+cast(@kchi as varchar(2)),2)+
right('0'+cast(@pci as varchar(2)),2) +
right('0'+cast(@zwhi as varchar(2)),2)
where jdh = @jdh
set @zwhi = @zwhi + 1
set @rsi = @rsi + 1
if @rsi=@mrs1+1 or @rsi=@mrs2+1 or @rsi=@mrs3+1
set @zwhi = 1
set @ksrs = @ksrs-1
if @ksrs = 0
break
fetch next from cur_syk into @jdh
end
close cur_syk
deallocate cur_syk
fetch next from cur_kwk into @kddh,@spc,@bxdh,@ksrs,@bzwh
end
close cur_kwk
deallocate cur_kwk
set nocount off
GO
请问这样的存储过程如何用Hql实现?
49 楼
caomeiliang
2011-04-26
SELECT * FROM (
SELECT A.*, ROW_NUMBER() OVER(PARTITION BY CID ORDER BY VAULE DESC) RANK
FROM (SELECT X.*, S.NAME SNAME, C.NAME CNAME
FROM A_STUDENT S, A_COURSE C, A_SCORE X
WHERE X.SID = S.ID
AND X.CID = C.ID) A )WHERE rank<=10
根据这个改成hql应该是:
SELECT new Student(id,name) from (select A.sname name,A.id id,ROW_NUMBER() OVER(PARTITION BY CID ORDER BY VAULE DESC) RANK
FROM (SELECT X.*, S.NAME SNAME, C.NAME CNAME
FROM tStudent S, tCourse C, tScore X
WHERE X.SID = S.ID
AND X.CID = C.ID) A )WHERE rank<=10
SELECT A.*, ROW_NUMBER() OVER(PARTITION BY CID ORDER BY VAULE DESC) RANK
FROM (SELECT X.*, S.NAME SNAME, C.NAME CNAME
FROM A_STUDENT S, A_COURSE C, A_SCORE X
WHERE X.SID = S.ID
AND X.CID = C.ID) A )WHERE rank<=10
根据这个改成hql应该是:
SELECT new Student(id,name) from (select A.sname name,A.id id,ROW_NUMBER() OVER(PARTITION BY CID ORDER BY VAULE DESC) RANK
FROM (SELECT X.*, S.NAME SNAME, C.NAME CNAME
FROM tStudent S, tCourse C, tScore X
WHERE X.SID = S.ID
AND X.CID = C.ID) A )WHERE rank<=10
48 楼
assdust110
2011-04-26
nishijia 写道
弱弱地问一下,lazy加载的问题 该如何解决? 我曾经听过一个多年的架构师用hibernate,遇到lazy加载的时候session关闭的问题,最后只好关掉lazy
你那个问题应该是struts+hibernate集成的时候(或类似的框架集成),在控制器中关闭了hibernate的session,而后在页面中你又要迭代对象集合,结果对象集合中的A对象包含了B对象的实体在被访问的时候出现了session关闭的问题,不知是不是这样理解的?这个问题产生的根源其实你去想想程序执行的流程就可以了,用spring,用filter都可以解决这个问题。
发表评论
-
hibernate导出到数据量的方法
2012-04-16 16:30 939在需要将数据导出的地方,由于数据量大,将数据放到内存会导致内存 ... -
http://download.jboss.org/jbosstools/updates/stable
2012-04-05 16:45 866http://download.jboss.org/jboss ... -
ibatis和hibernate使用ehcache
2011-12-08 20:31 920ibatis使用ehcache http://apps ... -
关于hibernate的createSQLQuery两个限制
2011-09-22 15:36 1708由于涉及到到的SQL查询,SQL长度超出4000字符,不得不使 ... -
spring事务管理失败
2011-07-05 13:56 889我的BaseBuzDAO实现了SqlMapClientDaoS ... -
注解POJO比不上使用配置文件的地方
2011-05-12 18:28 10691、跨数据库,POJO将无法公用 使用注解方式的POJO,将会 ... -
hibernate弊端
2011-04-22 07:13 741首先,我并不是一个hibernate开发的推崇者,如果不是项目 ...
相关推荐
Struts和Hibernate是Java Web开发中的两个重要框架,它们在构建高效、可维护的Web应用程序时发挥着关键作用。这个“Struts+Hibernate项目”旨在为开发者提供一个学习和实践的平台,帮助他们快速理解这两种框架的集成...
本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...
Hibernate Search是Hibernate框架的一个扩展,它允许我们在应用程序中实现全文检索功能,使得数据库中的数据可以被快速、高效地搜索。这个功能尤其在处理大量文本数据时非常有用,比如在电商网站的商品搜索或者新闻...
通过深入理解和实践这些源码,开发者可以更好地掌握Hibernate在实际开发中的应用。 Hibernate是一款强大的Java持久化框架,它简化了数据库操作,将对象与关系数据库之间的映射(ORM)工作自动化。在这个项目中,...
在这个项目中,开发者将深入理解如何在Java应用程序中使用Hibernate来处理复杂的数据关联和持久化操作。 **一、Hibernate简介** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用对数据库的...
hibernate3应用实例hibernate3应用实例hibernate3应用实例hibernate3应用实例
java开发过程中hibernate的应用
Hibernate Web应用的开发一般经过以下几个步骤: (1)创建数据库。 (2)将Hibernate所需的JAR包复制到WEB-INF/lib下。 (3)创建Hibernate的配置文件。 (4)利用Hibernate的第三方工具或Eclipse的有关插件从...
【hibernate+maven demo项目工程】是一个基于Hibernate ORM框架和Maven构建工具的示例项目,旨在帮助开发者理解和实践如何在实际开发中整合这两项技术。该项目的主要目的是展示如何利用Maven管理依赖,以及如何配置...
在"Spring Hibernate Ext"项目中,Spring和Hibernate被紧密集成,实现了一种数据访问层的解决方案。Spring通过其DataSource和Transaction Manager组件来管理数据库连接和事务,同时通过HibernateTemplate或...
2. **Hibernate配置**:学习如何在hibernate.cfg.xml中配置数据库连接,以及在实体类上使用注解实现一对一关系。 3. **Action逻辑**:查看Action类中的方法,理解如何根据请求调用业务逻辑并返回结果。 4. **DAO设计...
Hibernate应用及其详解
在本项目中,“hibernate连接Access应用项目例子”展示了如何使用Hibernate ORM框架与Microsoft Access数据库进行集成,实现数据的增、删、改、查(CRUD)操作。Hibernate是Java开发中的一个流行ORM(对象关系映射)...
### Hibernate与Struts在J2EE中的应用 #### 一、引言 随着企业级应用需求的日益增长,Java作为一种广泛使用的编程语言,在构建大型、复杂的企业应用方面展现了其强大的能力。Java 2 Platform, Enterprise Edition...
插件安装后,开发者可以创建一个新的Java项目,并在其中加入Hibernate所需的lib文件和数据库的JDBC驱动文件。 接下来,需要配置Hibernate的配置文件,通常名为“hibernate.cfg.xml”。在这个文件中,需要指定使用的...
《Hibernate开发及整合应用大全》是一本专注于Java领域持久化框架Hibernate深度学习和实践的电子书,它旨在帮助开发者在实际项目中高效地利用Hibernate进行数据管理。在讲解Hibernate核心概念的同时,本书还强调了其...
9. 实战项目:通过实际项目源码,学习如何在真实场景中应用Hibernate,解决具体问题。 10. 调试与优化:学习如何调试Hibernate应用,以及性能调优的技巧。 通过这个教程,学习者不仅可以获得理论知识,还能通过实际...
在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 上"提供了这三大框架的实践项目代码,帮助开发者深入理解并掌握它们的集成与应用。 Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP...
在这个“简单的Hibernate应用”中,我们将探讨Hibernate的基本概念、核心组件以及如何在实际项目中应用。 1. Hibernate概览:Hibernate是一个开源的ORM框架,它提供了一种在Java应用程序中管理关系数据库的机制。...