使用hibernate是使用oracleA存 

         使用hibernate是使用oracleA存
   在JDON 逛了许久,学到了很多东西,在专注与技术的同时,知道还要关注架构,关注模式.
   最近要进行架构选择的时候,我在想用tapestry+spring+hibernate;还是tapestry+spring+oracle预存了!
同样hibernate 和oracle预存了!都可以对隔离对上层对数据库的 直接操作,对象观点当然是选择hibernate了,但是要做报表的话,就麻烦了!报表通过预存的话,可以做出很多复杂的功能,用hibernate的话就比较麻烦了.呵呵!
   结合我门公司的情况.oracle预存是每个员工的基本技能,高手多的是(我不会,汗!).
   "使用数据库黑匣子"比"使用hibernate黑匣子"就好多了,对上层的隔离也很好!速度和效率都都保证!维护也方便!升级也方便.
   但是,如果要换调数据库的话旧案麻烦了.但是到连数据库都想换掉,语言恐怕也要换了!

   因此,我选用oracle预存放架构!


_________________________________________________________
仅仅是个选择,渴望大虾门!指点!

>使用数据库黑匣子"比"使用hibernate黑匣子"就好多了
我认为这是错误的观点,hibernate等代表的持久层框架是透明的,是和我们的domain model相关的,如果使用oracle 预存,将会容易导致走向面向数据库的系统,就象很多人总是会用C++编制非对象化程序一样。

熟悉这条路,就容易过重依赖这条路,又回答过去可维护性差 可拓展差的老局面。

数据库只是和文件系统/LDAP等一样,是一个持久化载体,不是我们真正关注的,就象张艺谋拍的那些乡土电影,并不是就落后农村说事,而是将其作为载体,有更高的寓意。数据库就是张艺谋电影的乡村载体。

将更多设计概念(缓存等)从数据库上脱离出来,让数据库纯粹变成一个具体的产品,而且应该是可更换的产品,数据库产品发展到现在差异很小,google搜索一下文章报道,连开源MySQL已经可以和Oracle媲美了,IBM的DB2都开源了,都什么年代了,还相信那些Sales的说辞。

当然,不是一定要选择hibernate, oracle的TopLink也和hibernate一样是一个持久化框架,而且是最早的,被它收购了。


谢谢!bang的回复!
上面的道理我也明白啊!所以在选择的时候,才有这个疑问!
但关键的是,还有一个很重要的需求就是报表,特别是比较复杂的动态(传递参数)报表!
用预存很好解决(公司高手也多),用持久化工具,就不好解决了!

>比较复杂的动态(传递参数)报表,用预存很好解决
动态报表基本是各种条件的查询,持久化工具对复杂查询是不太行,需要专门优化框架。

公司预存做的顺手 高效 还有经验就用预存么。这也是为什么ibatis有生存空间。很多时候我们面对的是遗留系统的整合 重构,还有就是一些关键系统大多数逻辑都由db做了,比如oracle PL/sql开发的。
我倒是建议你看看ibatis,DB高手写预存,留接口给java写业务的。

  就目前,公司的状况预存方案!还是最适合的!我要的是"黑匣子"
I可以做"黑匣子"吗?用在页面的话!就失去了我用tapestry的用意了!

我要页面很"干净",不影响美工!

我说的东西和美工和页面没关系
如果想在现有方案下让你的service层与DB层更漂亮点 你看看iBatis吧,用不了你1个小时时间就会了,因为你们都是call 预存么。ibatis配置上也很简单。Hibernate需要很强的OO分析设计能力才能用漂亮,ibatis不用,他是对sql的封装,同样是类似


// 在此输入java代码
private String resource=
"com/mitsubishi_motors/april/maintenance/db/ibatis.xml";
private Reader reader;
//private SqlMapClientBuilder xmlBuilder;
private SqlMapClient mySqlMap;
reader = Resources.getResourceAsReader(resource);
mySqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
mySqlMap.startTransaction();
GeneralMsg msg = new GeneralMsg();
msg.setMsgID(
"301");
msg.setMsgTitle(
"ibatis");
msg.setMsgContent(
"ibatis bt o ");
int rows = mySqlMap.update(
"updateMsg",msg);
mySqlMap.commitTransaction();

是不是和hibernate用起来很像,但是底层是写的sql,也就是他的映射文件是SQL 也可以call procedure。所以感觉很适合你们。

非常感谢blueoxygen !
看来我又要熬夜了哦!看iBatis!昨天下载了还没看.现在代理同事(事假)的工作,比较忙点!
我在想iBatis对改进直接传参数CALL,对隔离封装"黑匣子"是否更好了.

我先去试试


iBatis也是一个恰当折衷的选择,Jdon的JPetstore是使用struts+jdon+ibatis编写的,利用Jdon框架的批量查询缓存特性,结合iBatis对SQL语句的缓存,两种粒度不一样,所以才有网友对Jdon的Jpetstore运行性能感觉很快的评论。

Jdon Jpetstore源码和演示:
http://www.jdon.com/jdonframework/app.htm

用ibatis吧,这个东西在做复杂系统时可用

用于隔离SQL在确实不错!

非常感谢,大家的建议!是我会在去思考一些问题,而不是架构本身!
谢谢!

―――――――――――――――――――――――――――――――――――
设计需要用时间来沉淀,建筑、服装都是如此,软件产品也一样……
夏昕

对于数据库SQL很熟悉的程序员来说,用iBATIS是个很不错的选择,对于一个很负责的查询,例如多表联欢,还有对某些字段内容的特殊显示(对字段内容进行分割,计算,字典代码转换等等),sql高手们可以很轻松的在sql语句中利用数据库自带函数或自定义函数直接查询得到最终要显示给用户的结果......
在系统实现代码中能有更大更多的自由度。
当然,这些会有系统移植到不同数据库的成本代价,不过,系统要换数据库的事情不是经常会发生的。