实用主义,不使用Hibernate,枚举类Enum在OR映射中应用
在很早以前刚接触Hibernate,觉得新奇,网上有很多评价,称如何如何的好用,就研究了一下,看了源代码,做了测试,一步一步的跟了进去.也学了不少东东,但感觉有些繁琐(或许我还没有领会其精髓所在吧).在我们做企业应用系统中对持久数据层的需求就是能够开发出这样的一种映射架构,能够透明的把规格好的数据和需要DB执行业务逻辑的sql传输给DB执行,以及伴随着异常和事务的处理.那么问题基础是,如何实现良好的封装sql和sql参数的取值.将这两个属性数据传输给你的持久数据框架,让其执行JDBC事务操作.在我做项目的过程中,大概有60-70%的模块逻辑操作,是针对主键数据对象,包括主键查询,删除,插入,修改,以及数据库表列的全查询,如果能够找到某种映射机制,将你的java实体对象和数据库字段实现完美的映射(如java注释,XDoclet标记,xml配置文件等),通过映射类将需要操作的业务对象,由持久层自动处理,这样就可以处理应用系统中大部分的业务模块的基本数据操作.
从java1.5开始,有了Enum类,使用Enum类作为OR映射介质(后面称其为"实体映射类"),可用很好的实现OR映射,
1, Enum实体映射类,要求实现一个公共的接口,可以获得例如映射的数据库表名称,映射的java实体对象全类名,等信息.例如实体映射类包含的属性设置如下:
SmMenuObjEnum(String _field, String _property, String caption, Class _type, boolean _pkField, String _defaultValue)
2,使用自动代码生成器,可以指定数据库表,自动创建java实体对象和实体映射类.
3,系统启动加载时,通过映射解析引擎,获得实体对象的基本操作对象(包括sql,和sql参数对应java实体对象的属性名称,类型等信息)
4, 开发客户调用时,传入需要处理的装载有业务数据的实体对象(可选参数-实体映射类),持久框架引擎根据实体类,获得当前需要操作的sql,并自动组装sql参数,最后由事务参与对象执行JDBC操作.
使用Enum类作为OR映射介质,可以达到很好的效果:
1,使用代码生成器自动创建所有的java实体对象和映射类.
2,避免了在程序中使用字符串的方式取得数据库表字段名称,可以直接使用映射枚举类成员获得,这样在数据模型修改时,在系统开发状态的编译,就可以找到程序中需要变化的地方.
3,可以使用映射枚举类,组装sql.
4,简单实用.
当然了对于个性化特殊的复杂查询sql,还是使用xml配置文件的方式,作为资源加载,供持久化层调用.这样便于在数据非结构性变化时,优化查询sql,而不用重新部署或者更新我们的系统程序.
----------------------------------
http://www.lenosen.com
联生在线进销存管理信息系统,采用J2EE技术,在自主研发的WEB框架基础上开发的一款
稳定可靠,扩展强,可灵活配置的面向SAAS服务的WEB应用系统.