HashMap关系数据映射技术,是使用HashMap数据结构作为载体,实现应用程序和数据库之间数据存取的一种技术。【为简易起见,将“HashMap关系数据映”简称为“HRM”】
在Java世界中,就是使用Map对象作为载体,实现应用程序和数据库之间数据存取的一种技术。
JDBC是各大数据库供应商共同遵循的标准,数据库对于JDBC来说是完全透明的,数据库所有的结构信息都可以通过JDBC提取;而Map使用键值对表达数据,同数据库记录中的字段与字段值之间形成了对应关系。 由于有了这两个基础,从而为实现HashMap关系数据映射(HRM)技术提供了前提。正因为如此,ORM中定义xml映射文件或注入属性的做法完全是多余的。
HashMap关系数据映射(HRM)技术与对象关系映射(ORM)技术,它们的目标基本一致,但实现的技术手段有着本质的不同。ORM技术使用实体Bean或普通旧式Java Bean(POJO)作为载体,实现数据存取。 因此,需要定义大量的实体bean或Java Bean,实体bean或java bean 中还需要定义大量的属性,如果一个数据库表有上百个甚至数百个字段,定义这样的bean,对于编程人员来说将是难以忍受的。 不仅如此,这到目前为止,ORM还必须定义xml映射文件或者通过注入属性的方式找到bean的属性与字段之间的对应关系,这在物理上是对数据库的结构信息进行了重复定义,从而人为导致了软件工程文件量的急剧膨胀, 必然导致大量的人力财力的投入。
使用HashMap关系数据映射(HRM)技术,完全不需要大量的bean类,更不需要定义xml映射文件或者注入属性。其优点是很明显的。
0.1 HashMap关系数据映射技术的构思过程
2003年,我取得了SUN认证Java2程序员的资格,这是我程序人生的重要起点。之前,我有过两年的dbase经历、四年的C++Builder经历。2004年,我正在认真研读《Java数据库编程宝典》和《Java Developers ALMANAC》两部著作,翻阅了若干部其它Java书籍,那时对Hibernate一度产生了浓厚的兴趣,但用了后觉得挺麻烦。
为什么要构思HashMap关系数据映射技术,那是因为我有了以前的经历,有了对比,所以对当时以Hibernate为代表的对象关系映射技术产生了强烈地质疑,回想以前dbase数据库编程,好简洁、好轻松。作为一种工具,在能够解决问题的前提下,减轻工作负担,才是值得称道的。ORM把解决的问题复杂化了,导致软件工程文档急剧膨胀,软件的开发效率低,成本高。
使用Hibernate实现数据库编程,根本不比JDBC轻松。当时Hibernate受到了整个软件行业的吹捧,我觉得存在很大的盲目性,如果用户需要实现EJB分布式事务,Hibernate是个合理的可选项,其它情况下未必合理。
在这种情况下,我会把对HashMap关系数据映射技术的研究坚持下去。
0.2 早期HashMap关系数据映射技术产品Pvo1.x
2005年年底,我向国家版权局提交“HashMap关系数据映射技术软件v1.0【简称:PVO v1.0】”软件著作权登记,2006年7月5日取得该著作权证书,登记号:2006SR08692。
这可能是我今生最重要的一项研究成果,如果对Java同行会有帮助,我希望它能成为Java世界的共同财富,因此,我决定将它开源。
2006年4月26日,我初次在CSDN发表了首篇博文“HashMap关系数据映射技术(简称PVO技术) ”,一度引起了同行们的关注。我要感谢所有转载、收藏这篇文章的朋友,感谢所有评价这篇文章的朋友,不论是赞扬也好,还是贬低也好。有了朋友的关注,我会更认真地对待这一技术的研究。值得一提的是,2006年6月1日,我收到了来自中科院软件所一位同志的来信,向我提出了其中的一个bug问题和开源问题。后来,他非常肯定地告诉我:“与hibernate等超级工具相比,pvo略显单薄,但是pvo的优势就是它的小巧,方便,易用。在小的项目中,比hibernate更合适”,他还告诉我pvo技术用在当时的一些奥运项目和北京市易做图的一些项目中,在这些项目中,他们同时使用了Hibernate和pvo,认为它们各有优势。非常感谢他的坦诚、热情。但令我感到有点遗憾的是,当时的pvo刚刚诞生,还存在许多不足。
需要说明的是,pvo同后来流行的iBatis/MyBatis有类似之处,但二者是完全不同的技术产品。pvo构思和发表时,作者并不知道有iBatis。二者如有雷同,纯属巧合。pvo是一款简化JDBC数据库编程的工具,使用的是JDBC事务,没有提供JTA分布式事务的支持,这是根据需求所决定。在Jave世界,真正使用JTA分布式事务的工程只是少数,而提供这种技术支持的产品相当成熟,如果用户需要使用Java分布式事务,建议使用JPA2.x、Hibernate3.x等技术。 请注意:JDBC事务、JTA事务是不能混合使用的,JTA事务必须受JavaEE服务器支持,目前的web服务器均不支持JTA事务。当前主流的大型数据库服务器自身都具有分布式事务处理的能力。
pvo的核心类是ProcessVO.java,主要用来实现数据库的CRUD操作,采用HashMap关系数据映射技术(HRM)实现,因此无需配置数据库映射文件、无需注解,使用起来小巧、灵活、方便。更多详细描述请参阅http://my.csdn.net/wj800的博客。
pvo后来的变化,主要体现在以下几点:
增加了万能表单解析工具ProcessForm
增加了一组读取管理数据库信息的工具Db.java、Table.java、Field.java
增加了一个客户端辅助javascript工具,pvo.js
ProcessForm是一个真正意义上的万能表单解析工具,它可以提取任何复杂的表单所上传的数据,将这些数据整理成List<Map>类型的结果集,支持任何类型的文件上传,如果包含图片文件,则自动提取图片文件的宽度、高度、文件类型等信息,可以解析任意未知的表单,因此在B/S编程中,非常有用。可以毫不夸张地说,ProcessForm目前胜过任何一款上传解析工具。更重要的是,能直接将解析结果作为ProcessVO相关方法的参数,把数据保存到数据库中。从而做到了,提交表单与保存数据之间的完美组合。
pvo.js的作用是将表单自动整合成xml数据,以Ajax方式提交给web服务器,ProcessForm支持xml格式的表单数据的解析。pvo.js的第二个作用是,实现了javascript的Map对象,支持javascript对List<Map>类型数据的处理。
Db.java、Table.java、Field.java的作用是将原ProcessVO中的部分功能独立出来,并加以丰富,独立提取、管理数据库的结构信息,为ProcessVO等服务;使得pvo数据库的编程更加智能化、人性化。这三个类出现后,在pvo中增加了一个DbFree类,试图让JDBC数据库编程更加自由、轻松,但DbFree的目标没有完成,我在考虑是否要重新整合pvo,HashMap关系数据映射技术的一个新的实现正在酝酿中。
0.3 PVO凤凰涅槃,JadePool华丽转世
大概在2010年,我就有重新整合pvo的想法,后来由于同连云港一家信息技术公司合作开发在线建站系统,耗费的精力太多,这事就搁置了。2012年10月的一天,突然感到很无聊,想起了两年前想做的事情。想了几天,新的HashMap关系数据映射技术工具就叫“JadePool”吧。
JadePool的中文含义是瑶池,是中国神话中西王母宴请各路神仙的仙境,那里蕴藏着丰富的宝藏。而这里的JadePool一头连接着用户,另一头连接着数据库,在另一头同样蕴藏着巨大的宝藏。jadepool.cn这个域名,一次性注册了10年的使用期,www.jadepool.cn将来就作为HRM的主题网站。
JadePool是通过对原有pvo1.x深度整合、精心设计而得到的结果,是基于HashMap关系数据映射(HRM)技术实现的高效的JDBC编程工具。
上世纪80年代,中国棋圣聂卫平刮起的聂旋风席卷神州大地。那时,我同一批小年轻的战友一样爱上了围棋,一段时间天天研究布局、定式、手筋、官子,研究围棋的技术、战术,业余时间常常拼得你死我活,一时间,曾打遍营区无敌手,后来居然还拿到了业余初段证书。入段就意味着一个棋手已经有了良好的大局观,他会站在更高、更远、更深的层次来思考问题,而不是仅仅局限于某一技术、战术的层面。
JadePool是绝对站在全局的高度所研发的一款高效的JDBC数据库编程工具,一旦将它引入我们的程序开发,将会对整个软件工程产生深刻的影响。大家不妨从小的项目着手试一试JadePool能够带来的好处。花半小时来学习一下JadePool,将会给你的程序设计带来一场易做图性的变化。
在我所接触的软件开发人员中,已经听到N多次数据库死锁的问题,说实在的,每次听到有人向他们报告数据库死锁的问题,我总是感到很诧异。怎么会呢?在我所开发的大小十多个系统中,至今还没有发现过数据库连接死锁的现象。过去的pvo和现今的JadePool在异常处理上还是下了一番功夫的。
JadePool的能力
极为简便的应用
极为高效的编程能力
相当可观的的程序执行效率
智能提取数据库结构信息
智能插入更新记录
大型数据记录分组索引查询
永远告别数据库连接死锁
对获取的查询结果再加工
万能表单解析
良好的面向对象的体系设计,为今后的发展奠定了坚实的基础
......
以上这些能力,将会在JadePool源代码测试中得到充分的验证。这一切,足以让JadePool应用者从繁重的数据库编程中解放出来,可以把更多的精力放在业务逻辑的处理上,创造更多更好的软件产品。
作者在此郑重承诺,JadePool永远是开源的。本站将详细讲解JadePool源代码的重要的技术细节,对每一个重要的技术细节进行认真测试,会认真地听取广大同行的建议,对发现的问题及时修正。