CN105373536A - 一种实现dao接口的方法及装置 - Google Patents

一种实现dao接口的方法及装置 Download PDF

Info

Publication number
CN105373536A
CN105373536A CN201410408684.9A CN201410408684A CN105373536A CN 105373536 A CN105373536 A CN 105373536A CN 201410408684 A CN201410408684 A CN 201410408684A CN 105373536 A CN105373536 A CN 105373536A
Authority
CN
China
Prior art keywords
dao
interface
name
class
self
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410408684.9A
Other languages
English (en)
Other versions
CN105373536B (zh
Inventor
施嘉佳
姚先锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Tmall Technology Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201410408684.9A priority Critical patent/CN105373536B/zh
Publication of CN105373536A publication Critical patent/CN105373536A/zh
Application granted granted Critical
Publication of CN105373536B publication Critical patent/CN105373536B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

一种实现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(JavaDevelopmentKit,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),updateXXXX(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(AspectOrientedProgramming,面向切面编程)的框架使用,例如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语句为:deletetablefromtable2whereid=#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、光学存储器等)上实施的计算机程序产品的形式。

Claims (20)

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接口。
CN201410408684.9A 2014-08-19 2014-08-19 一种实现dao接口的方法及装置 Active CN105373536B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410408684.9A CN105373536B (zh) 2014-08-19 2014-08-19 一种实现dao接口的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410408684.9A CN105373536B (zh) 2014-08-19 2014-08-19 一种实现dao接口的方法及装置

Publications (2)

Publication Number Publication Date
CN105373536A true CN105373536A (zh) 2016-03-02
CN105373536B CN105373536B (zh) 2019-01-18

Family

ID=55375743

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410408684.9A Active CN105373536B (zh) 2014-08-19 2014-08-19 一种实现dao接口的方法及装置

Country Status (1)

Country Link
CN (1) CN105373536B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106021068A (zh) * 2016-05-27 2016-10-12 北京京东尚科信息技术有限公司 服务接口的监控方法和监控系统
CN107038057A (zh) * 2016-10-31 2017-08-11 东软集团股份有限公司 创建类的方法及装置
CN108108483A (zh) * 2018-01-09 2018-06-01 政采云有限公司 基于SpringAop拦截DAO层校验SQL的方法、装置和系统
CN111078726A (zh) * 2019-12-16 2020-04-28 厦门网宿有限公司 数据访问层的操作方法、服务器及存储介质
CN111259067A (zh) * 2020-01-21 2020-06-09 褚晶晶 一种基于Spring实现DAO接口的方法、装置及设备
CN115658276A (zh) * 2022-11-21 2023-01-31 深圳市明源云科技有限公司 业务开发方法、装置、电子设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014438A1 (en) * 2001-04-27 2003-01-16 Sylvain Devillers Internal data structure for an application intended to interface with an interface for an HTML or XML-type document
CN101339559A (zh) * 2008-07-18 2009-01-07 北京航空航天大学 一种数据持久化实现方法
CN103049251A (zh) * 2011-10-17 2013-04-17 中国移动通信集团公司 一种数据库持久层装置及数据库操作方法
CN103309650A (zh) * 2012-03-14 2013-09-18 阿里巴巴集团控股有限公司 持久层代码的生成方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014438A1 (en) * 2001-04-27 2003-01-16 Sylvain Devillers Internal data structure for an application intended to interface with an interface for an HTML or XML-type document
CN101339559A (zh) * 2008-07-18 2009-01-07 北京航空航天大学 一种数据持久化实现方法
CN103049251A (zh) * 2011-10-17 2013-04-17 中国移动通信集团公司 一种数据库持久层装置及数据库操作方法
CN103309650A (zh) * 2012-03-14 2013-09-18 阿里巴巴集团控股有限公司 持久层代码的生成方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张元亮: "《布局Java EE企业级开发 寻觅框架和开发模式的完美整合》", 31 March 2013, 清华大学出版社 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106021068A (zh) * 2016-05-27 2016-10-12 北京京东尚科信息技术有限公司 服务接口的监控方法和监控系统
CN106021068B (zh) * 2016-05-27 2018-07-17 北京京东尚科信息技术有限公司 服务接口的监控方法和监控系统
CN107038057A (zh) * 2016-10-31 2017-08-11 东软集团股份有限公司 创建类的方法及装置
CN108108483A (zh) * 2018-01-09 2018-06-01 政采云有限公司 基于SpringAop拦截DAO层校验SQL的方法、装置和系统
CN108108483B (zh) * 2018-01-09 2021-02-09 政采云有限公司 基于SpringAop拦截DAO层校验SQL的方法、装置和系统
CN111078726A (zh) * 2019-12-16 2020-04-28 厦门网宿有限公司 数据访问层的操作方法、服务器及存储介质
CN111078726B (zh) * 2019-12-16 2022-11-04 厦门网宿有限公司 数据访问层的操作方法、服务器及存储介质
CN111259067A (zh) * 2020-01-21 2020-06-09 褚晶晶 一种基于Spring实现DAO接口的方法、装置及设备
CN111259067B (zh) * 2020-01-21 2023-06-06 褚晶晶 一种基于Spring实现DAO接口的方法、装置及设备
CN115658276A (zh) * 2022-11-21 2023-01-31 深圳市明源云科技有限公司 业务开发方法、装置、电子设备及可读存储介质

Also Published As

Publication number Publication date
CN105373536B (zh) 2019-01-18

Similar Documents

Publication Publication Date Title
CN105373536A (zh) 一种实现dao接口的方法及装置
JP5099982B2 (ja) 完全な柔軟性を有する自動化に基づくユーザインターフェースを生成する方法および装置
Balatsouras et al. Structure-sensitive points-to analysis for C and C++
US7421716B1 (en) System and method for providing composite applications
CN106716349A (zh) 特化类的手动精炼
US20100313182A1 (en) Extensible user interface generation
US9563446B2 (en) Binary file generation
CN106796522A (zh) 用于更新源代码文件的系统和方法
CN103718155A (zh) 运行时系统
JP2014529832A (ja) 変換コンテンツ・アウェア・データー・ソース管理
KR20170133120A (ko) 컨테이너 이미지 관리 시스템 및 방법
CN105389315A (zh) 一种动态网页更新方法及装置
WO2008018962A1 (en) Software transactional protection of managed pointers
EP1668498A2 (en) Creating and checking runtime data types
KR101629054B1 (ko) 데이터베이스 애플리케이션 내비게이션
US9317710B2 (en) System and method for specification and enforcement of a privacy policy in online services
KR20220113372A (ko) 통합된 참조물 및 2차 객체 표시
CN109344173B (zh) 数据管理方法和装置、数据结构
CN109558121A (zh) 接口驱动程序的开发方法、装置、设备及存储介质
US7793309B2 (en) Method and apparatus for a container managed persistent entity bean support architecture
US9189297B2 (en) Managing shared memory
US20200225942A1 (en) Method for creating run-time executables for data analysis functions
Monnier et al. Evolution of emacs lisp
CN106484489A (zh) 一种扩展编程语言特性的方法及装置
US20190265959A1 (en) Automatically synchronizing the install and build directories of a software application

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20211109

Address after: Room 507, floor 5, building 3, No. 969, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province

Patentee after: ZHEJIANG TMALL TECHNOLOGY Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Patentee before: ALIBABA GROUP HOLDING Ltd.

TR01 Transfer of patent right