访问数据库的方法和装置的制造方法

文档序号:9453103阅读:416来源:国知局
访问数据库的方法和装置的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,特别地涉及一种访问数据库的方法和装置。
【背景技术】
[0002] JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语 句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接 口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能 够编写数据库应用程序。目前极少有J2EE应用会直接以JDBC的方式进行数据库访问。毕 竟,用面向对象的程序设计语言来访问关系数据库,开发过程中的工作量很大。大部分时 候,J2EE应用都会以0RM框架来进行数据访问,0RM(0bjectRelationalMapping)框架采 用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象 一映射文件中。只要提供了持久化类与表的映射关系,0RM框架在运行时就能参照映射文 件的信息,把对象持久化到数据库中。当前0RM框架主要有三种:Hibernate(Nhibernate), iBATIS,EclipseLink。在所有0RM框架中,Hibernate以其灵巧、轻便的封装赢得了众多开 发者的青睐。虽然Hibernate为开发者提供了便利的条件,但是原生的框架并不一定完全 满足现实中的开发要求,在项目的规范制定上会有限制,不利于项目的后续升级和维护。因 此,如何对这些框架进行二次封装,以满足开发需要是一个关键问题,这个问题主要体现在 三方面内容:一是符合项目本身的开发规范,二是要降低层次之间的耦合,三是提高系统性 能和开发效率。
[0003] 在目前的通常做法中,一般是以SpringI0C容器为核心,承上启下。通过 Spring提供的如下三个工具类(或接口)来支持持久层的实现:HibernateDaoSupPOrt、 HibernateTemplate、以及HibernateCallback。通过SpringIOC容器,将SessionFactory Bean注入DA0组件,一旦DA0组件获得了SessionFactoryBean的引用,就可以完成实际的 数据库访问。
[0004] 实际开发过程中,通常会发现服务层和持久层的接口基本一样,不同点就是服务 层会有一些业务逻辑的处理,事务的控制;持久层的接口则会直接调用框架的底层接口来 进行数据库访问,这些接口基本都是一样的处理逻辑:增加、删除、修改、查询。每实现一个 业务,都需要调用相同的接口实现相似的功能,产生代码重复的现象,这无形之中增加了开 发人员的工作量。并且开发人员需要频繁的对持久对象(P0)和值对象(V0)进行转化,不 但浪费工作量,而且非常耗内存,影响系统性能。
[0005] 在解親方面,虽然通过SpringI0C实现了Bean的注入,看起来实现了低親合,但 实际上并没有,因为持久层暴露的接口很多,基本每个业务都会有一系列接口,如果真的需 要对持久层调整,还是需要修改大量的代码,也就是说,仍存在耦合性高的问题。
[0006] 此处,目前的通常做法还存在代码规范性不易统一的问题。具体而言,Hibernate 提供的HQL语言虽然解决了跨数据库的问题,但是Hibernate框架本身对HQL和SQL都支 持,如果不从框架上进行规范,很难实现接口一致性,对数据库的升级替换也埋下隐患。

【发明内容】

[0007] 有鉴于此,本发明提供一种访问数据库的方法和装置,有助于提高系统性能和开 发效率,另外有助于解决接口规范性问题。
[0008] 为实现上述目的,根据本发明的一个方面,提供了一种访问数据库的方法。
[0009] 本发明的访问数据库的方法包括:接收持久层的公共接口类的类对象和值映射 表;所述类对象是将持久层抽象为一个公共接口类而得到的类对象;根据所述类对象获取 值对象,并且根据所述值映射表和所述类对象,对该值对象进行父实体的填充;将完成所述 填充的值对象转换为持久对象;将所述持久对象中的数据保存到数据库中。
[0010] 可选地,将完成所述填充的所述值对象转换为持久对象的步骤包括:对于完成所 述填充的值对象,采用BeanUtiIs工具将其转换为持久对象。
[0011] 可选地,所述进行父实体的填充的步骤包括:通过会话工厂获取所述类对象的元 数据信息;检查所述类对象每个字段的类型,在检查到的当前字段的类型为实体类型的情 况下,根据所述值映射表中的映射关系和外键查找到该当前字段对应的实体,然后将该实 体填充到所述值对象中。
[0012] 可选地,在需要进行数据库更新操作的情况下,该方法还包括:接收持久层的公共 接口类的类对象和值映射表;根据所述值映射表和所述类对象对值对象进行父实体的填 充;查找所述类对象的元数据信息以获得字段名称;采用HQLBulider工具类,按照所述值 映射表拼装出HQL语句;根据所述HQL语句生成Query对象,然后使用query.setParameter 工具设置所述HQL语句的参数,再执行所述HQL语句以更新所述数据库。
[0013] 可选地,在需要进行数据库查询操作的情况下,该方法还包括:使用Query对象的 list方法获取数据库中的数据,将该数据通过值映射表和值表进行包装然后输出。
[0014] 根据本发明的另一方面,提供了一种访问数据库的装置。
[0015] 本发明的访问数据库的装置包括:接收模块,用于接收持久层的公共接口类的类 对象和值映射表;所述类对象是将持久层抽象为一个公共接口类而得到的类对象;获取填 充模块,用于根据所述类对象获取值对象,并且根据所述值映射表和所述类对象,对该值对 象进行父实体的填充;转换模块,用于将完成所述填充的值对象转换为持久对象;保存模 块,用于将所述持久对象中的数据保存到数据库中。
[0016] 可选地,所述转换模块还用于对于完成所述填充的值对象,采用BeanUtils工具 将其转换为持久对象。
[0017] 可选地,还包括:获取模块,用于通过会话工厂获取所述类对象的元数据信息;检 查填充模块,用于检查所述类对象每个字段的类型,在检查到的当前字段的类型为实体类 型的情况下,根据所述值映射表中的映射关系和外键查找到该当前字段对应的实体,然后 将该实体填充到所述值对象中。
[0018] 可选地,还包括:填充模块,用于根据所述接收模块接收到的用于更新数据库的 值映射表和类对象,对值对象进行父实体的填充;查找模块,用于查找所述类对象的元数 据信息以获得字段名称;拼装模块,用于采用HQLBulider工具类,按照所述值映射表拼 装出HQL语句;更新操作模块,用于根据所述HQL语句生成Query对象,然后使用query. setParameter工具设置所述HQL语句的参数,再执行所述HQL语句以更新所述数据库。
[0019] 可选地,还包括查询输出模块,用于使用Query对象的list方法获取数据库中的 数据,将该数据通过值映射表和值表进行包装然后输出。
[0020] 根据本发明的技术方案,通过对Hibernate的封装,将持久层隐藏,开发人员只需 关注业务逻辑,不用考虑持久层开发,也不需要进行重复的代码拷贝,大大提高了开发效 率。同时也保留了框架的原生接口访问,为系统的扩展提供了更多的可能。通过对P0,V0 的封装,将二者的转化过程由框架实现,减少了开发人员的工作量,也减少了内存开销,提 高了系统的性能。持久层向上层只暴露一个接口,在应用中只有一个工厂实例,降低了层次 之间的耦合,大大提高了系统的扩展性和弹性。所有数据库操作都是通过HQL来完成,一方 面可以兼容多数据库,另一方面保证了系统的规范性,同时也提供了SQL语句的访问接口, 方便系统后续的扩展和维护。
【附图说明】
[0021] 附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
[0022] 图1是用于实现对结果映射表的遍历的核心类图;
[0023] 图2是根据本发明实施方式的对数据库进行保存操作的基本步骤的示意图;
[0024] 图3是根据本发明实施方式的对数据库进行更新操作的基本步骤的示意图;
[0025] 图4是根据本发明实施方式的执行数据库保存操作的一种具体流程的示意图;
[0026] 图5是根据本发明实施方式的执行数据库更新操作的一种具体流程的示意图;
[0027] 图6是根据本发明实施方式的用于实现数据库查询操作的核心类图;
[0028] 图7是根据本发明实施方式的实现HQLUtil实例的具体流程的示意图;
[0029] 图8是根据本发明实施方式的追加字符串和参数的方法的具体流程图;
[0030] 图9是基于本发明实施方式中的HQL拼装工具类处理值对象的具体流程的示意 图;
[0031] 图10是根据本发明实施方式的关于服务层接口的类图;
[0032] 图11是根据本发明实施方式的访问数据库的装置的主要模块的示意图。
【具体实施方式】
[0033] 以下结合附图对本发明的示范性实施方式做出说明,其中包括本发明实施方式的 各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认 识到,可以对这里
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1