一种实现DAO接口的方法及装置.pdf

上传人:小** 文档编号:6204554 上传时间:2019-05-20 格式:PDF 页数:25 大小:1.18MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410408684.9

申请日:

2014.08.19

公开号:

CN105373536A

公开日:

2016.03.02

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20140819|||公开

IPC分类号:

G06F17/30; G06F9/44

主分类号:

G06F17/30

申请人:

阿里巴巴集团控股有限公司

发明人:

施嘉佳; 姚先锋

地址:

英属开曼群岛大开曼资本大厦一座四层847号邮箱

优先权:

专利代理机构:

北京市清华源律师事务所11441

代理人:

沈泳; 李赞坚

PDF下载: PDF下载
内容摘要

本申请公开了一种实现DAO接口的方法和装置,所述方法包括:根据DAO接口,生成所述DAO接口的DAO对象;接收对所述DAO对象的方法的调用指令;根据所述调用指令,判断所述方法是否为自定义实现的方法,若是,则执行所述自定义实现的方法;若否,则通过DAO对象实现所述方法;其中,所述自定义实现的方法包括至少两个数据库操作。采用本申请提供的方法,通过约定DAO接口、方法和SQL映射中的SQL语句标识的命名规范,使得在应用程序启动阶段,能够自动生成DAO接口的DAO对象;在应用程序运行阶段,能够执行自定义实现的方法,从而达到有效减少代码量、提高开发效率的效果。

权利要求书

1.一种实现DAO接口的方法,其特征在于,包括:
根据DAO接口,生成所述DAO接口的DAO对象;
接收对所述DAO对象的方法的调用指令;
根据所述调用指令,判断所述方法是否为自定义实现的方法,若是,则执
行所述自定义实现的方法;若否,则通过DAO对象实现所述方法;
其中,所述DAO对象是指所述DAO接口的实现类的对象;所述自定义实
现的方法包括至少两个数据库操作。
2.根据权利要求1所述的实现DAO接口的方法,其特征在于,所述根据
所述调用指令,判断所述方法是否为自定义实现的方法包括:
根据所述调用指令,获取所述DAO接口的接口名和所述方法的方法名;
根据所述接口名,判断是否存在所述DAO接口的DAO抽象类,若是,则
根据所述方法名,判断所述DAO抽象类中是否实现所述方法,若是,则判定所
述方法为自定义实现的方法。
3.根据权利要求2所述的实现DAO接口的方法,其特征在于,所述根据
所述接口名,判断是否存在所述DAO接口的DAO抽象类包括:
根据所述接口名,获取所述DAO接口对应的值对象的类名;
根据所述值对象的类名,生成所述DAO抽象类的类名;
判断是否存在名称为所述DAO抽象类的类名的抽象类,如果存在,则判定
存在所述DAO接口的DAO抽象类。
4.根据权利要求3所述的实现DAO接口的方法,其特征在于,所述DAO
抽象类的类名是指包括所述值对象的类名,并且前缀为Abstract、后缀为
DaoImpl、DAOImpl、Dao或DAO的类名。
5.根据权利要求1所述的实现DAO接口的方法,其特征在于,所述执行
所述自定义实现的方法是指,逐个执行所述自定义实现的方法中的每一条语句
中的方法,并且是通过DAO对象实现所述方法。
6.根据权利要求1或5所述的实现DAO接口的方法,其特征在于,所述
通过DAO对象实现所述方法包括:
解析所述方法的方法名,获取所述方法的操作类型;
根据所述方法名,在SQL映射中查找与所述方法名对应的SQL语句标识;
根据所述SQL语句标识,获取所述SQL语句;
将所述SQL语句和与其对应的参数值传给负责操作数据库的接口对象,并
获取返回的结果;
其中,所述SQL映射是指所述SQL语句标识和所述SQL语句的对应关系;
所述参数值包含在所述方法的调用指令中,所述参数值包括:值对象,值对象
的属性,所述SQL语句的条件值。
7.根据权利要求6所述的实现DAO接口的方法,其特征在于,所述方法
的操作类型包括:读操作,写操作。
8.根据权利要求6所述的实现DAO接口的方法,其特征在于,所述方法
名和所述SQL语句标识相同。
9.根据权利要求6所述的实现DAO接口的方法,其特征在于,所述操作
数据库的接口对象是指SqlMapClient对象。
10.根据权利要求1所述的实现DAO接口的方法,其特征在于,所述根据
DAO接口,生成所述DAO接口的实现类的DAO对象之前,还包括:
遍历各个接口,获取DAO接口。
11.一种实现DAO接口的装置,其特征在于,包括:
生成DAO对象单元,用于根据DAO接口,生成所述DAO接口的DAO对
象;
接收调用单元,用于接收对所述DAO对象的方法的调用指令;
判断执行单元,用于根据所述调用指令,判断所述方法是否为自定义实现
的方法,若是,则执行所述自定义实现的方法;若否,则通过DAO对象实现所
述方法;
其中,所述DAO对象是指所述DAO接口的实现类的对象;所述自定义实
现的方法包括至少两个数据库操作。
12.根据权利要求11所述的实现DAO接口的装置,其特征在于,所述判
断执行单元包括:
第一判断子单元,用于所述根据所述调用指令,判断所述方法是否为自定
义实现的方法;
所述第一判断子单元包括:
第一获取单元,用于根据所述调用指令,获取所述DAO接口的接口名和所
述方法的方法名;
查找自定义方法单元,用于根据所述接口名,判断是否存在所述DAO接口
的DAO抽象类,若是,则根据所述方法名,判断所述DAO抽象类中是否实现
所述方法,若是,则判定所述方法为自定义实现的方法。
13.根据权利要求12所述的实现DAO接口的装置,其特征在于,所述查
找自定义方法单元包括:
第二获取单元,用于根据所述接口名,获取所述DAO接口对应的值对象的
类名;
生成抽象类名单元,用于根据所述值对象的类名,生成所述DAO抽象类的
类名;
第二判断子单元,用于判断是否存在名称为所述DAO抽象类的类名的抽象
类,如果存在,则判定存在所述DAO接口的DAO抽象类。
14.根据权利要求13所述的实现DAO接口的装置,其特征在于,所述DAO
抽象类的类名是指包括所述值对象的类名,并且前缀为Abstract、后缀为
DaoImpl、DAOImpl、Dao或DAO的类名。
15.根据权利要求11所述的实现DAO接口的装置,其特征在于,所述判
断执行单元还包括:
第一执行子单元,用于执行所述自定义实现的方法,所述执行所述自定义
实现的方法是指,逐个执行所述自定义实现的方法中的每一条语句中的方法,
并且是通过DAO对象实现所述方法。
16.根据权利要求11或15所述的实现DAO接口的装置,其特征在于,所
述判断执行单元还包括:
第二执行子单元,用于通过DAO对象实现所述方法;
所述第二执行子单元包括:
第三获取单元,用于解析所述方法的方法名,获取所述方法的操作类型;
查找标识单元,用于根据所述方法名,在SQL映射中查找与所述方法名对
应的SQL语句标识;
第四获取单元,用于根据所述SQL语句标识,获取所述SQL语句;
执行操作单元,用于将所述SQL语句和与其对应的参数值传给负责操作数
据库的接口对象,并获取返回的结果;
其中,所述SQL映射是指所述SQL语句标识和所述SQL语句的对应关系;
所述参数值包含在所述方法的调用指令中,所述参数值包括:值对象,值对象
的属性,所述SQL语句的条件值。
17.根据权利要求16所述的实现DAO接口的装置,其特征在于,所述方
法的操作类型包括:读操作,写操作。
18.根据权利要求16所述的实现DAO接口的装置,其特征在于,所述方
法名和所述SQL语句标识相同。
19.根据权利要求16所述的实现DAO接口的装置,其特征在于,所述操
作数据库的接口对象是指SqlMapClient对象。
20.根据权利要求11所述的实现DAO接口的装置,其特征在于,还包括:
获取DAO接口单元,用于遍历各个接口,获取DAO接口。

说明书

一种实现DAO接口的方法及装置

技术领域

本申请涉及数据库访问领域,具体涉及一种实现DAO接口的方法及装置。

背景技术

DAO(DataAccessObject,数据访问对象)是一个数据访问接口,夹在业
务逻辑与数据库资源中间,负责与数据库打交道。DAO模式是标准的J2EE设
计模式之一。通过使用这个模式,把底层的数据访问操作和上层的商务逻辑分
开,使得开发人员能够更加专注于编写数据访问代码。一个典型的DAO实现有
下列几类组件:DAO工厂类、DAO接口、实现DAO接口的具体类及数据传
递对象等。其中,DAO接口定义了数据访问的方法,实现DAO接口的具体类
包含了从特定的数据源访问数据的逻辑。

在Web应用的分层体系中,iBATIS是一个基于SQL映射支持Java和·NET的
持久层框架,iBATIS提供的持久层框架包括SQLMaps和DAO。由于iBATIS
小巧、灵活、上手快等特点,使得越来越多的人都将它作为首选的Web应用的
持久层框架。目前,在Web应用的分层体系中,DAO只做了数据库的基本操作
以及类似的简单操作,其中,数据库的基本操作包括增加、读取、更改和删除
(简称CRUD)。在实际开发中,实现DAO接口大量的工作就是把数据库基本
操作的参数和SQL(StructuredQueryLanguage,结构化查询语言)语句传给负
责数据库操作的接口对象,然后返回相应的结果。因此,在具体实现DAO接口
时,需要编写大量的重复代码,大量的重复劳动造成了开发资源的浪费。

随着科学技术的发展以及应用需求的不断变化,互联网应用发生快速的变
化,倾向于承受功能的增加,并且不断的集成新的功能,传统上被称为“垂直
开发”,因此强烈需求提高程序开发效率。

2010年iBATIS改名为Mybatis,在Mybatis持久层框架中,引入了新的特
性,支持通过DAO接口与XML(ExtensibleMarkupLanguage,可扩展标记语
言)映射文件的绑定,自动生成DAO接口的具体实现,从而提高了程序开发效
率。然而,采用这种方法存在以下问题:

1)不支持自定义实现

该方法首先通过指定DAO方法与SQL语句之间的绑定,然后通过JDK(Java
DevelopmentKit,Java语言的软件开发工具包)代理来实现最后的SQL语句执
行,但无法实现一个方法中包括多条SQL语句的执行场景。在实际的应用场景
中往往有自定义的需求,比如DAO接口中有10个方法,其中有一个删除的方
法需要删除多个表的数据。在这种情况下,需要全部自己实现DAO接口的10
个方法,无法实现部分用代理自动实现DAO接口、部分用自定义实现的方法。

2)使用成本高

对于已经基于在iBATIS上构建的应用,则无法使用,需要整体迁移,成本
较高。

综上所述,在Mybatis持久层框架中,通过DAO接口与XML映射文件的
绑定,自动生成DAO接口的具体实现的现有技术存在老系统升级困难、扩展性
差的问题。因而,在实际应用中,iBATIS仍然是首选的Web应用的持久层框架。

在iBATIS持久层框架中,现有技术无法自动生成DAO接口的具体实现,
从而需要编写大量的重复代码,造成了开发资源的浪费。

发明内容

本申请提供一种实现DAO接口的方法和装置,提升DAO接口的实现效率。

本申请提供一种实现DAO接口的方法,包括:

根据DAO接口,生成所述DAO接口的DAO对象;

接收对所述DAO对象的方法的调用指令;

根据所述调用指令,判断所述方法是否为自定义实现的方法,若是,则执
行所述自定义实现的方法;若否,则通过DAO对象实现所述方法;

其中,所述DAO对象是指所述DAO接口的实现类的对象;所述自定义实
现的方法包括至少两个数据库操作。

可选的,所述根据所述调用指令,判断所述方法是否为自定义实现的方法
包括:

根据所述调用指令,获取所述DAO接口的接口名和所述方法的方法名;

根据所述接口名,判断是否存在所述DAO接口的DAO抽象类,若是,则
根据所述方法名,判断所述DAO抽象类中是否实现所述方法,若是,则判定所
述方法为自定义实现的方法。

可选的,所述根据所述接口名,判断是否存在所述DAO接口的DAO抽象
类包括:

根据所述接口名,获取所述DAO接口对应的值对象的类名;

根据所述值对象的类名,生成所述DAO抽象类的类名;

判断是否存在名称为所述DAO抽象类的类名的抽象类,如果存在,则判定
存在所述DAO接口的DAO抽象类。

可选的,所述DAO抽象类的类名是指包括所述值对象的类名,并且前缀为
Abstract、后缀为DaoImpl、DAOImpl、Dao或DAO的类名。

可选的,所述执行所述自定义实现的方法是指,逐个执行所述自定义实现
的方法中的每一条语句中的方法,并且是通过DAO对象实现所述方法。

可选的,所述通过DAO对象实现所述方法包括:

解析所述方法的方法名,获取所述方法的操作类型;

根据所述方法名,在SQL映射中查找与所述方法名对应的SQL语句标识;

根据所述SQL语句标识,获取所述SQL语句;

将所述SQL语句和与其对应的参数值传给负责操作数据库的接口对象,并
获取返回的结果;

其中,所述SQL映射是指所述SQL语句标识和所述SQL语句的对应关系;
所述参数值包含在所述方法的调用指令中,所述参数值包括:值对象,值对象
的属性,所述SQL语句的条件值。

可选的,所述方法的操作类型包括:读操作,写操作。

可选的,所述方法名和所述SQL语句标识相同。

可选的,所述操作数据库的接口对象是指SqlMapClient对象。

可选的,所述根据DAO接口,生成所述DAO接口的实现类的DAO对象
之前,还包括:

遍历各个接口,获取DAO接口。

相应的,本申请还提供一种实现DAO接口的装置,包括:

生成DAO对象单元,用于根据DAO接口,生成所述DAO接口的DAO对
象;

接收调用单元,用于接收对所述DAO对象的方法的调用指令;

判断执行单元,用于根据所述调用指令,判断所述方法是否为自定义实现
的方法,若是,则执行所述自定义实现的方法;若否,则通过DAO对象实现所
述方法;

其中,所述DAO对象是指所述DAO接口的实现类的对象;所述自定义实
现的方法包括至少两个数据库操作。

可选的,所述判断执行单元包括:

第一判断子单元,用于所述根据所述调用指令,判断所述方法是否为自定
义实现的方法;

所述第一判断子单元包括:

第一获取单元,用于根据所述调用指令,获取所述DAO接口的接口名和所
述方法的方法名;

查找自定义方法单元,用于根据所述接口名,判断是否存在所述DAO接口
的DAO抽象类,若是,则根据所述方法名,判断所述DAO抽象类中是否实现
所述方法,若是,则判定所述方法为自定义实现的方法。

可选的,所述查找自定义方法单元包括:

第二获取单元,用于根据所述接口名,获取所述DAO接口对应的值对象的
类名;

生成抽象类名单元,用于根据所述值对象的类名,生成所述DAO抽象类的
类名;

第二判断子单元,用于判断是否存在名称为所述DAO抽象类的类名的抽象
类,如果存在,则判定存在所述DAO接口的DAO抽象类。

可选的,所述DAO抽象类的类名是指包括所述值对象的类名,并且前缀为
Abstract、后缀为DaoImpl、DAOImpl、Dao或DAO的类名。

可选的,所述判断执行单元还包括:

第一执行子单元,用于执行所述自定义实现的方法,所述执行所述自定义
实现的方法是指,逐个执行所述自定义实现的方法中的每一条语句中的方法,
并且是通过DAO对象实现所述方法。

可选的,所述判断执行单元还包括:

第二执行子单元,用于通过DAO对象实现所述方法;

所述第二执行子单元包括:

第三获取单元,用于解析所述方法的方法名,获取所述方法的操作类型;

查找标识单元,用于根据所述方法名,在SQL映射中查找与所述方法名对
应的SQL语句标识;

第四获取单元,用于根据所述SQL语句标识,获取所述SQL语句;

执行操作单元,用于将所述SQL语句和与其对应的参数值传给负责操作数
据库的接口对象,并获取返回的结果;

其中,所述SQL映射是指所述SQL语句标识和所述SQL语句的对应关系;
所述参数值包含在所述方法的调用指令中,所述参数值包括:值对象,值对象
的属性,所述SQL语句的条件值。

可选的,所述方法的操作类型包括:读操作,写操作。

可选的,所述方法名和所述SQL语句标识相同。

可选的,所述操作数据库的接口对象是指SqlMapClient对象。

可选的,还包括:

获取DAO接口单元,用于遍历各个接口,获取DAO接口。

与现有技术相比,本申请具有以下优点:

通过约定DAO接口、方法和SQL映射中的SQL语句标识的命名规范,使
得在应用程序启动阶段,能够根据命名规范,自动解析DAO接口并生成DAO
接口的DAO对象;在应用程序运行阶段,当调用DAO对象的方法时,能够根
据命名规范,自动判断方法是否为自定义实现的方法,若是,则执行自定义实
现的方法;若否,则根据命名规范,自动解析DAO对象的方法并实现方法,从
而达到有效减少代码量、提高开发效率的效果。

附图说明

图1是本申请的实现DAO接口的方法实施例的流程图;

图2是本申请的实现DAO接口的方法实施例中DAO对象从创建到调用的
时序图;

图3是本申请的实现DAO接口的方法实施例中判断所述方法是否为自定义
实现的方法的具体流程图;

图4是本申请的实现DAO接口的方法实施例中判断是否存在所述DAO接
口的DAO抽象类的具体流程图;

图5是本申请的实现DAO接口的方法实施例中通过DAO对象实现所述方
法的具体流程图;

图6是本申请的实现DAO接口的方法实施例的系统总体结构图;

图7是本申请的实现DAO接口的装置实施例的示意图;

图8是本申请的实现DAO接口的装置实施例中第一判断子单元801的示意
图;

图9是本申请的实现DAO接口的装置实施例中查找自定义方法单元8012
的示意图;

图10本申请的实现DAO接口的装置实施例中判断执行单元703的示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请
能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背
本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。

在本申请中,提供了一种实现DAO接口的方法和装置。在下面的实施例中
逐一进行详细说明。

请参考图1,其为本申请的实现DAO接口的方法实施例的流程图。所述方
法包括如下步骤:

步骤S101:根据DAO接口,生成所述DAO接口的DAO对象。

本申请实施例所述的DAO接口将对数据源的访问操作抽象封装在一个公共
API(ApplicationProgramInterface,应用程序接口)中。这个公共API定义了
应用程序中将会用到的事务方法。在应用程序中,当业务层需要和数据源进行
交互的时候则使用这个DAO接口,并且编写一个单独的类来实现这个接口在逻
辑上对应的特定数据的存储功能。通过使用DAO接口,能够把底层的数据访问
逻辑和高层的业务逻辑分开,从而建立一个健壮的应用程序。

一个DAO接口对应数据库中的一个数据表,例如:数据表名为member,
在member中,记录了成员的信息,包括:名称、出生日期以及性别等信息,则
该数据表对应的DAO接口名可以为IMemberDAO。一个DAO接口定义了数据
访问的方法,包括:增加、删除、修改以及查询等数据库基本操作,每一个方
法包括对应该方法的参数,例如:方法名为insertXXXX(Longid),update
XXXX(Longid),findXXXX(Longid)。

本申请所述的DAO对象是指DAO接口的实现类的对象,DAO接口的实现
类包含了从特定的数据源访问数据的逻辑,DAO对象是DAO接口的实现类的
一个实例。在应用程序启动阶段,根据DAO接口的命名规范,解析DAO接口,
生成DAO对象。例如:DAO接口名为IMemberDAO,根据DAO接口名,生成
DAO对象,该DAO对象名为memberDAO。

在步骤S101,可以采用代理模式,生成所述DAO接口的DAO对象。当一
个对象不能或者不想直接引用另一个对象时,可以应用代理模式在这两者之间
构建一个桥梁,即代理对象。代理为控制要访问的目标对象提供了一种途径。
当访问对象时,它引入了一个间接的层。按照代理对象的创建时期不同,代理
模式可以分为两种:1)静态代理:程序员事先写好代理对象类,代理对象在程
序发布前就已经存在了;2)动态代理:应用程序发布后,动态创建代理对象。
在实际使用时,静态代理模式需要指定具体的目标对象,因此需要建立大量的
代理类,违背了重复代码只写一次的原则。

动态代理包括JDK动态代理和CGLIB(CodeGenerationLibrary,代码生成
类库)代理。在JDK动态代理模式中,代理对象和目标对象都实现相同的DAO
接口,目标对象作为代理对象的一个属性。具体接口实现中,可以在调用目标
对象相应方法前后加上其他业务处理逻辑。JDK动态代理只能针对实现了接口
的类生成代理,JDK动态代理的内部实现机制是通过反射来实现的,对代理对
象的所有方法的调用都要通过使用反射的invoke方法,所以在性能上面会有一
定的影响。在性能方面,如果静态调用和反射调用分别调用1000万次,则静态
调用的用时为764毫秒,反射调用的用时为1516毫秒,两者的速度相差几乎一
倍。静态调用的速度明显高于反射调用的速度。由于静态代理的内部实现机制
是通过静态调用来实现的,JDK动态代理的内部实现机制是通过反射调用来实
现的,因此静态代理的速度明显高于JDK动态代理的速度。

CGLIB是一个强大的高性能的代码生成包,广泛的被许多AOP(Aspect
OrientedProgramming,面向切面编程)的框架使用,例如SpringAOP和dynaop,
为它们提供方法的拦截。CGLIB是一个优秀的动态代理框架,可以在运行期扩
展Java类与实现Java接口。CGLIB针对类来实现代理,底层使用ASM在内存
中动态的生成被代理类的子类,覆盖其中的所有方法。使用CGLIB即使被代理
类没有实现任何接口也可以实现动态代理功能,如果目标对象没有实现接口,
则默认会采用CGLIB代理;如果目标对象实现了接口,也可以强制使用CGLIB
实现代理。CGLIB简单易用,核心用的是ASM字节码操作,ASM能够通过改
造既有类,直接生成需要的代码。由于增强的代码是硬编码在新生成的类文件
内部的,因此没有反射带来性能上的付出。同时,ASM与Proxy编程不同,不
需要为增强代码而新定义一个接口,生成的代码可以覆盖原来的类,或者是原
始类的子类,它是一个普通的Java类而不是Proxy类,甚至可以在应用程序的
类框架中拥有自己的位置,派生自己的子类。因此,在性能方面,CGLIB动态
代理跟静态调用相差无几,但由于CGLIB动态代理需要生成子类,从而导致创
建代理对象时速度较慢,系统生成的类内存也会占用较多。CGLIB动态代理的
运行速度要远远快于JDK动态代理。

综上所述,若采用静态代理,则运行速度最快,但需要事先写好代理对象
类,因此降低了开发效率;若采用JDK动态代理,则运行速度比采用静态代理
慢一倍左右,但无需手工编写任何DAO实现类代码,因此开发效率高;若采用
CGLIB动态代理,在性能方面与静态调用类似,缺点是由于要生成子类所以创
建代理对象时速度较慢,系统生成的类占用内存较多,而且需要预先为DAO接
口定义一个空的实现类,因此降低了开发效率。可见,采用上述三种代理模式
生成DAO对象各有优缺点,在实际使用中,可以根据具体需求,选择上述三种
代理模式之一。在本实施例中,DAO对象是通过JDK动态代理生成的,无须手
工编写任何DAO实现类代码。

在步骤S101,也可以不采用代理模式,通过javassist或者ASM字节码操作
动态生成DAO实现类,并根据方法的命名规范生成方法体。采用这种方式生成
DAO实现类,在性能方面,与采用静态代理模式和CGLIB动态代理模式生成
DAO实现类基本相同,缺点在于生成实现类的速度较慢,整体效果与采用CGLIB
动态代理模式生成DAO实现类的效果基本相同。

在本实施例中,当调用自定义实现的方法时,由于预先已经为DAO接口定
义了一个包括自定义实现的方法的抽象类,因此可以采用CGLIB动态代理模式,
从而提高运行速度。

请参考图2,其为本申请的实现DAO接口的方法实施例中DAO对象从创
建到调用的时序图。在本实施例中,当应用程序启动时,Spring容器首先启动
DaoNamespaceHandler类,DaoNamespaceHandler类初始化IDaoGenerator类,
IDaoGenerator类创建IXXXDAO的一个实例,即DAO对象。在应用程序运行
过程中,当调用者调用DAO对象的方法时,DAO对象调用DaoInvoker的invork
方法,将DAO对象、调用的方法名及参数传递到invork方法,根据DAO接口、
方法和SQL语句标识的命名规范,获取调用的方法名所对应的SQL语句,最后,
通过StatementExecutor类执行SQL语句,并获取响应的结果。

步骤S102:接收对所述DAO对象的方法的调用指令。

本申请所述的DAO对象的方法,即包括只对应一个数据库操作的方法,还
包括自定义实现的方法。其中,自定义实现的方法包括至少两个数据库操作。

例如:一个DAO接口定义为:


其中,insertXXXX、updateXXXX和findXXXX为只对应一个数据库操作的方法。
deleteXXXX为自定义实现的方法,将自定义实现的方法定义在DAO接口对应
的抽象类中,例如:


其中,deleteXXX1和deleteXXX2各自分别对应一个数据库操作,deleteXXXX
中包括deleteXXX1和deleteXXX2两个数据库操作。若使用Mybatis,需要把
deleteXXXX这个方法拆成多个方法分别去调用不同的SQL语句,然后在调用方
BO(BussinessObject,业务对象)里面去组装关联删除的逻辑,由此可能导致
不能够把底层的数据访问逻辑和高层的业务逻辑分开。

步骤S103:根据所述调用指令,判断所述方法是否为自定义实现的方法,
若是,则执行所述自定义实现的方法;若否,则通过DAO对象实现所述方法。

请参考图3,其为本申请的实现DAO接口的方法实施例中判断所述方法是
否为自定义实现的方法的具体流程图。在本实施例中,根据所述调用指令,判
断所述方法是否为自定义实现的方法包括如下步骤:

步骤S301:根据所述调用指令,获取所述DAO接口的接口名和所述方法的
方法名。

步骤S302:根据所述接口名,判断是否存在所述DAO接口的DAO抽象类,
若是,则根据所述方法名,判断所述DAO抽象类中是否实现所述方法,若是,
则判定所述方法为自定义实现的方法。

请参考图4,其为本申请的实现DAO接口的方法实施例中判断是否存在所
述DAO接口的DAO抽象类的具体流程图。在本实施例中,根据所述接口名,
判断是否存在所述DAO接口的DAO抽象类包括:

步骤S401:根据所述接口名,获取所述DAO接口对应的值对象的类名。

步骤S402:根据所述值对象的类名,生成所述DAO抽象类的类名。

步骤S403:判断是否存在名称为所述DAO抽象类的类名的抽象类,如果存
在,则判定存在所述DAO接口的DAO抽象类。

在本实施例中,DAO抽象类的类名是指包括所述值对象的类名,并且前缀
为Abstract、后缀为DaoImpl、DAOImpl、Dao或DAO的类名。

本申请提供的实现DAO接口的方法,是基于预设的DAO接口和方法的命
名规范,对DAO接口和方法进行名称解析的,接口命名规范如表1所示:

类型
前缀
后缀
接口
I
Dao、DAO
自定义实现
Abstract
DaoImpl、DAOImpl、Dao、DAO

表1、接口命名规范

方法命名规范如表2所示,iBATIS中SQL语句标识的命名要跟方法名一样。

类型
前缀
查询操作
find、get、list、count、page
添加操作
create、Insert、add、new
更新操作
update、modify
删除操作
delete、remove

表2、方法命名规范

在本实施例中,执行所述自定义实现的方法是指,逐个执行所述自定义实
现的方法中的每一条语句中的方法,并且是通过DAO对象实现所述方法。

请参考图5,其为本申请的实现DAO接口的方法实施例中通过DAO对象
实现所述方法的具体流程图。在本实施例中,通过DAO对象实现所述方法包括:

步骤S501:解析所述方法的方法名,获取所述方法的操作类型。

在本实施例中,方法的操作类型包括:读操作,写操作。例如:insertXXXX、
updateXXXX和deleteXXXX对应的方法的操作类型为写操作,返回结果为操作
是否成功;findXXXX对应的方法的操作类型为读操作,根据参数生成查询条件,
获取查询结果集。

步骤S502:根据所述方法名,在SQL映射中查找与所述方法名对应的SQL
语句标识。

本申请所述的SQL映射是指所述SQL语句标识和所述SQL语句的对应关系,
预先存储在iBATIS实体SQL映射文件中。其中,SQL语句标识的命名要跟DAO
接口的方法名一样,例如:



步骤S503:根据所述SQL语句标识,获取所述SQL语句。

本申请提供的实现DAO接口的方法,根据调用的DAO接口的方法名,在SQL
映射中获取与方法名一致的SQL语句标识,并根据SQL语句标识,在SQL映射
中获取对应的SQL语句。例如:对上述SQL映射文件实例,当调用DAO接口的
deleteXXX2方法时,获取对应的SQL语句为:deletetablefromtable2where
id=#id#。

步骤S504:将所述SQL语句和与其对应的参数值传给负责操作数据库的接
口对象,并获取返回的结果。

本申请所述的参数值包含在所述方法的调用指令中,所述参数值包括:值
对象,值对象的属性,所述SQL语句的条件值。

本申请所述的负责操作数据库的接口对象是指SqlMapClient对象。
SqlMapClient对象是iBATIS操作数据库的接口,执行CRUD等操作,它也可以
执行事务管理等操作。这个接口涉及到对SQL映射的执行和批处理。

在本实施例中,根据DAO接口,生成所述DAO接口的实现类的DAO对
象之前,还包括:

遍历各个接口,获取DAO接口。

请参考图6,其为本申请的实现DAO接口的方法实施例的系统总体结构图。
系统包括应用层、接口层、数据处理层和基础制成层,其中,应用层包括三个
步骤:

1)DAO接口解析:即在步骤S101中,根据DAO接口,生成所述DAO接
口的DAO对象;

2)DAO方法解析:即在步骤S103中,根据调用指令,判断方法是否为自
定义实现的方法,若是,则执行所述自定义实现的方法;若否,则通过DAO对
象实现方法;

3)DAO实现生成:即通过步骤S501至S504,自动实现DAO接口的方法。

本申请提供的实现DAO接口的方法,通过约定DAO接口、方法和SQL映
射中的SQL语句标识的命名规范,使得在应用程序启动阶段,能够根据命名规
范,自动解析DAO接口并生成DAO接口的DAO对象;在应用程序运行阶段,
当调用DAO对象的方法时,能够根据命名规范,自动判断方法是否为自定义实
现的方法,若是,则执行自定义实现的方法;若否,则根据命名规范,自动解
析DAO对象的方法并实现方法,从而达到有效减少代码量、提高开发效率的效
果。

在上述的实施例中,提供了一种实现DAO接口的方法,与之相对应的,本
申请还提供一种实现DAO接口的装置。请参看图7,其为本申请的实现DAO
接口的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描
述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实
施例仅仅是示意性的。

本实施例的一种实现DAO接口的装置,包括:生成DAO对象单元701,
用于根据DAO接口,生成所述DAO接口的DAO对象;接收调用单元702,用
于接收对所述DAO对象的方法的调用指令;判断执行单元703,用于根据所述
调用指令,判断所述方法是否为自定义实现的方法,若是,则执行所述自定义
实现的方法;若否,则通过DAO对象实现所述方法;其中,所述DAO对象是
指所述DAO接口的实现类的对象;所述自定义实现的方法包括至少两个数据库
操作。

请参看图8,其为本申请的实现DAO接口的装置实施例中第一判断子单元
801的示意图。

可选的,所述判断执行单元703包括:

第一判断子单元801,用于所述根据所述调用指令,判断所述方法是否为自
定义实现的方法;

所述第一判断子单元801包括:

第一获取单元8011,用于根据所述调用指令,获取所述DAO接口的接口名
和所述方法的方法名;

查找自定义方法单元8012,用于根据所述接口名,判断是否存在所述DAO
接口的DAO抽象类,若是,则根据所述方法名,判断所述DAO抽象类中是否
实现所述方法,若是,则判定所述方法为自定义实现的方法。

请参看图9,其为本申请的实现DAO接口的装置实施例中查找自定义方法
单元8012的示意图。

可选的,所述查找自定义方法单元8012包括:

第二获取单元901,用于根据所述接口名,获取所述DAO接口对应的值对
象的类名;

生成抽象类名单元902,用于根据所述值对象的类名,生成所述DAO抽象
类的类名;

第二判断子单元903,用于判断是否存在名称为所述DAO抽象类的类名的
抽象类,如果存在,则判定存在所述DAO接口的DAO抽象类。

可选的,所述DAO抽象类的类名是指包括所述值对象的类名,并且前缀为
Abstract、后缀为DaoImpl、DAOImpl、Dao或DAO的类名。

请参看图10,其为本申请的实现DAO接口的装置实施例中判断执行单元
703的示意图。

可选的,所述判断执行单元703还包括:

第一执行子单元802,用于执行所述自定义实现的方法,所述执行所述自定
义实现的方法是指,逐个执行所述自定义实现的方法中的每一条语句中的方法,
并且是通过DAO对象实现所述方法。

可选的,所述判断执行单元703还包括:

第二执行子单元803,用于通过DAO对象实现所述方法;

所述第二执行子单元803包括:

第三获取单元1001,用于解析所述方法的方法名,获取所述方法的操作类
型;

查找标识单元1002,用于根据所述方法名,在SQL映射中查找与所述方法
名对应的SQL语句标识;

第四获取单元1003,用于根据所述SQL语句标识,获取所述SQL语句;

执行操作单元1004,用于将所述SQL语句和与其对应的参数值传给负责操
作数据库的接口对象,并获取返回的结果;

其中,所述SQL映射是指所述SQL语句标识和所述SQL语句的对应关系;
所述参数值包含在所述方法的调用指令中,所述参数值包括:值对象,值对象
的属性,所述SQL语句的条件值。

可选的,所述方法的操作类型包括:读操作,写操作。

可选的,所述方法名和所述SQL语句标识相同。

可选的,所述操作数据库的接口对象是指SqlMapClient对象。

可选的,还包括:

获取DAO接口单元(图中未示),用于遍历各个接口,获取DAO接口。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本
领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,
因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出
接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器
(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。
内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由
任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程
序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存
(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其
他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存
储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器
(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁
盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设
备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒
体(transitorymedia),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机
程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件
和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计
算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、
CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

一种实现DAO接口的方法及装置.pdf_第1页
第1页 / 共25页
一种实现DAO接口的方法及装置.pdf_第2页
第2页 / 共25页
一种实现DAO接口的方法及装置.pdf_第3页
第3页 / 共25页
点击查看更多>>
资源描述

《一种实现DAO接口的方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种实现DAO接口的方法及装置.pdf(25页珍藏版)》请在专利查询网上搜索。

本申请公开了一种实现DAO接口的方法和装置,所述方法包括:根据DAO接口,生成所述DAO接口的DAO对象;接收对所述DAO对象的方法的调用指令;根据所述调用指令,判断所述方法是否为自定义实现的方法,若是,则执行所述自定义实现的方法;若否,则通过DAO对象实现所述方法;其中,所述自定义实现的方法包括至少两个数据库操作。采用本申请提供的方法,通过约定DAO接口、方法和SQL映射中的SQL语句标识的命名。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1