在java的web开发领域较麻烦的是数据库操纵如果有工具能像delphi开发数据库运用系统那样高效它一定会受到开发者的欢迎
经过五个方面的比较newxy+struts WEB开发与deiphi桌面开发相比速度更快能力更强
newxy是hibernate的替代者struts+newxy是struts+hibernate的替代方案
struts的不足下面一篇文章有代表性《Struts的巨大烦恼 真的不适合大系统?》
主要观点是
一转到展示层时需要配置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
数据库的增删改
对查询所得数据缓存指定缓存时长
数据库字符编码与本地字符编码转换
文件上传上传大小控制
文件下载下载记数
图片显示
数据分页显示
客户端标记记录集哪条记录被选择
因为可以不写java代码不用建立ActionForm类Action类因而不用配置struts不用重新编译类文件不用重新打包不用重启服务器 可以克服struts的不足
在克服hibernate的不足方面newxy采用退化和进化并用的方案
newxy在进行数据的查询增删改时都会调用一注册方法根据业务涉及到的数据库相关数据源名和表名进行注册 注册的目的是要获得表字段对应的java类名主关键字段名主关键字段长度等数据保存在一个单子实例中以供DAO类调用 如果已注册不再注册
可以对多表查询语句注册如select afieldbfield from table as atable as b where ;
可以对跨数据源的查询注册如select afieldbfield from table as aDBdtotable as b where ;
如果是数据增删改则是对单一表注册
由于struts+newxy用即时注册的方法可以不象hibernate那样用静态文件影射数据库到值对象类开发者不用配置任何文件可以使用任意查询语句克服对象不够自由问题
hibernate通过配置文件设置表之间的关系有一定意义newxy在这方面算是退化的但struts+newxy在处理数据库表之间关系方面是很容易的
在事务处理方面newxy提供了一事务类netnewxydbmTransaction它可以将多个数据库的操作放在一个事务中由于DAO类对数据操作前的注册方法得到的表及其字段各种特性都是与数据库直接相关的而不是事先用静态文件影射 因而极少发生错误开发者可以通过Transaction的方法为不同的数据库设置不同的隔离等级可以设置操时回滚时间在设置的时间内事务没有完成会有一线程进行干预将事务回滚
hibernate的HQL语言是和数据库与对象影射规则相适应的它没有特别功能主要是利用值对象类来查询数据 newxy也提供了一种查询语言NQL开发者不需用特殊的语法来构建查询语句非常容易理解不会增加学习成本
struts一旦与newxy结合到一起运用是如此简单下列是struts+newxy代替struts+hibernate的例子
struts配置中formBean的type是netnewxystruts_facesDynaFormBean开发者不需另外设计ActionForm类如
<formbean name=myFormBean type=netnewxystruts_facesDynaFormBean />
用户从页面表单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)formgetDto();
dtoset_table(table);//如果用户页面没有传来数据库表名
try{
IFacade ifacade=IFacadeFactorygetFacade((_dao)
()); //绝大多数情况是IFacade ifacade=IFacadeFactorygetFacade();
//更新或插入如果result==null为update否则为insert
result = ifacadeupdate(dto);//或FormBeanUtilsupdate(ifacade form);
//删除记录
ifacaderemove(dto);//或:FormBeanUtilsremove(ifacade form);
//数据查询如果上传了符合newxy多项查询规则的数据查询记录集放在newForm 的_coll属性中
DynaFormBean newForm=new DynaFormBean();
FormBeanUtilscreateForm(newForm httpServletRequest);
//开发者如果想知道生成的sql语句可以这样
//string sql=formget_sql();
//由于开发者在对数据进行操作时完全不需知道sql语句所以没有提供方法让开发者直接得到sql语句来控制数据操作
//未来版本可能提供这样的方法
}catch(Exception e){
}
}
如果使用newxy的标签可以不建立Action类不设置struts的formBean及action可以不写代码
newxy技术网站