分享
 
 
 

struts+hibernate的替代方案:struts+newxy,开发效率提高十倍

王朝other·作者佚名  2007-01-01
窄屏简体版  字體: |||超大  

在java的web开发领域较麻烦的是数据库操纵,如果有工具能像delphi开发数据库运用系统那样高效,它一定会受到开发者的欢迎。

经过五个方面的比较,newxy+struts WEB开发与deiphi桌面开发相比,速度更快,能力更强。 http://blog.csdn.net/nlhlx/archive/2006/06/12/791047.aspx

newxy是hibernate的替代者,struts+newxy是struts+hibernate的替代方案。

struts的不足,下面一篇文章有代表性:《Struts的巨大烦恼 真的不适合大系统?》http://dev.csdn.net/develop/article/85/85114.shtm

主要观点是:

一、转到展示层时,需要配置forward,每一次转到展示层,相信大多数都是直接转到jsp, 而涉及到转向,需要配置forward,如果有十个展示层的jsp,需要配置十次struts, 而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后, 要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统, 这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的 系统, 大家可以想象一下,我的烦恼有多大。

二、当页面表单需要自动变化或者频繁变化时。

对于一个成熟的MIS系统来说,页面表单肯定是不固定的,甚至象有些系统,页面表单是存在数据库中, 需要填写的表单在页面自动生成,比如填写一个人员基本信息,本来只需要填写 姓名、性别、出生年月 三个指标, 而我后来需要增加籍贯这样的指标,我只需要在数据库中添加籍贯这个记录,并在页面就能自动增加籍贯这样的表单。 而 struts在这方面,其优势反而变成了不足,我参考了非常多的人力资源管理系统,这些系统几乎都能够做系统里面就可以控制人员信息的指示, 进行使展示层能随之灵活变化,如果使用了struts,这些灵活性就根本用不上。同时,如果页面表单频繁变化时,就需要频繁修改formbean对应的方法和属性,而每次修改之后,就要求重新部署,或者重新启动服务器……。

hibernate的不足,下面是一位网友的看法,具有代表性:

一、对象与数据库的映射,关键在于对象关系的映射,但是没做到很理想,配置过多,控制复杂, 另外还会出错。其实本质在于对象不够自由。

二、事务处理。这点上更容易出问题,相对于各种各样的事务管理器,要兼容是一个大问题, 总归在各种应用服务器上有很多问题。其本质在于创建了一个自我数据存取小环境,必然面临各种兼容问题。

三、HQL语言。建立对象查询语言,类SQL,但是不同于任何一种SQL,调试环境复杂。本质在于创建了一种语言,增加学习成本。

这位网友还提出了减化和退化方案。

struts+newxy之所以在开发效率上比struts+hibernate能提高十倍、甚至几十倍,是因为克服了struts与hiberate的不足。

利用newxy DAO类,标签, struts+newxy可以在以下几个方面不用写java代码,不用配置struts。 http://blog.csdn.net/nlhlx/archive/2006/06/11/788541.aspx

1.数据库的增、删、改;

2.对查询所得数据缓存,指定缓存时长;

3.数据库字符编码与本地字符编码转换;

4.文件上传,上传大小控制;

5.文件下载,下载记数;

6.图片显示;

7.数据分页显示;

8.客户端标记记录集哪条记录被选择;

因为可以不写java代码,不用建立ActionForm类、Action类,因而不用配置struts,不用重新编译类文件、不用重新打包、不用重启服务器。 可以克服struts的不足。

在克服hibernate的不足方面,newxy采用“退化”和“进化”并用的方案。

newxy在进行数据的查询、增、删、改时都会调用一注册方法,根据业务涉及到的数据库相关数据源名和表名进行注册, 注册的目的是要获得表字段对应的java类名,主关键字段名,主关键字段长度等数据,保存在一个单子实例中,以供DAO类调用。 如果已注册不再注册。

可以对多表查询语句注册,如:“select a.field1,b.field2 from table1 as a,table2 as b where ...";

可以对跨数据源的查询注册。如:"select a.field1,b.field2 from table1 as a,DB3.dto.table2 as b where ...";

如果是数据增、删、改,则是对单一表注册;

由于struts+newxy用即时注册的方法,可以不象hibernate那样用静态文件影射数据库到值对象类。开发者不用配置任何文件。可以使用任意查询语句,克服“对象不够自由”问题。

hibernate通过配置文件设置表之间的关系,有一定意义,newxy在这方面算是“退化”的,但struts+newxy在处理数据库表之间关系方面是很容易的。

在事务处理方面,newxy提供了一事务类net.newxy.dbm.Transaction。它可以将多个数据库的操作放在一个事务中。由于DAO类对数据操作前的注册方法得到的表及其字段各种特性都是与数据库直接相关的,而不是事先用静态文件影射, 因而极少发生错误;开发者可以通过Transaction的方法为不同的数据库设置不同的隔离等级;可以设置操时回滚时间,在设置的时间内事务没有完成,会有一线程进行干预,将事务回滚。

hibernate的HQL语言是和数据库与对象影射规则相适应的,它没有特别功能,主要是利用值对象类来查询数据。 newxy也提供了一种查询语言NQL。开发者不需用特殊的语法来构建查询语句。非常容易理解,不会增加学习成本。

struts一旦与newxy结合到一起运用是如此简单,下列是struts+newxy代替struts+hibernate的例子。

struts配置中,formBean的type是“net.newxy.struts_faces.DynaFormBean”,开发者不需另外设计ActionForm类。如:

<form-bean name="myFormBean" type="net.newxy.struts_faces.DynaFormBean" />

用户从页面表单submit数据后,在Action类的方法中,开发者可以用DynaFormBean代替struts ActionForm,用DynaDto代替hibernate 对象类。

public ActionForward methodName(ActionMapping actionMapping, ActionForm actionForm,

HttpServletRequest httpServletRequest,

HttpServletResponse httpServletResponse) throws Exception{

......

DynaFormBean form=(DynaFormBean)actionForm;

DynaDto dto=(DynaDto)form.getDto();

dto.set_table("table1");//如果用户页面没有传来数据库表名。

try{

IFacade ifacade=IFacadeFactory.getFacade(httpServletRequest.getParameter("_dao"),

httpServletRequest.getLocale()); //绝大多数情况是:IFacade ifacade=IFacadeFactory.getFacade();

//更新或插入,如果result==null,为update,否则为insert。

result = ifacade.update(dto);//或:FormBeanUtils.update(ifacade, form);

//删除记录

ifacade.remove(dto);//或:FormBeanUtils.remove(ifacade, form);

//数据查询,如果上传了符合newxy多项查询规则的数据。查询记录集放在newForm 的_coll属性中。

DynaFormBean newForm=new DynaFormBean();

FormBeanUtils.createForm(newForm, httpServletRequest);

......

//开发者如果想知道生成的sql语句,可以这样:

//string sql=form.get_sql();

//由于开发者在对数据进行操作时完全不需知道sql语句,所以没有提供方法让开发者直接得到sql语句来控制数据操作。

//未来版本可能提供这样的方法。

}catch(Exception e){

......

}

}

如果使用newxy的标签可以不建立Action类,不设置struts的formBean及action,可以不写代码。

newxy技术网站:http://www.newxy.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有