一种实现基于Java端多叉树对象增删改查服务的方法与流程

文档序号:33173839发布日期:2023-02-04 03:07阅读:30来源:国知局
一种实现基于Java端多叉树对象增删改查服务的方法与流程
一种实现基于java端多叉树对象增删改查服务的方法
技术领域
1.本发明涉及java软件开发技术领域,具体涉及一种实现基于java端多叉树对象增删改查服务的方法。


背景技术:

2.目前,对多叉树对象的增删改查等操作,主要是在数据库端用sql语句的多表联合查询的方式来实现。这种方式存在如下问题和缺点:(1)只有查询操作才体现了对多叉树对象中多个单表的操作,而增、删、改,一般只能操作一个单表,无法同时操作多个单表,如果要同时操作多个单表,必须要设置单表之间的外键约束关系,这样限制了系统开发的灵活性。
3.(2)相应的业务逻辑都集中在了底层的数据库端,由于sql语句方式是非过程化的,使得java端的可过程化的业务逻辑控制优势难以发挥。
4.(3)底层数据库操作的每一种结果,都要在java端建立一个java类与之对应,由于多叉树对象的结构复杂性及操作结果的多样性,大大增加了在java端代码开发的工作量,增加了系统调试、修改的难度,使得java端分层设计开发的优势大打折扣。
5.(4)由于sql语句是面向集合操作的,而多叉树对象是可递归的多层主子表结构,两者结构不同,使得多叉树对象常规的增删改查服务代码难以用模板引擎的方式自动生成。


技术实现要素:

6.发明目的:为了克服现有技术的不足,本发明提供一种实现基于java端多叉树对象增删改查服务的方法,解决了系统开发、修改和维护中对多叉树对象进行增删改查的工作量大,灵活性差的问题。
7.技术方案:本发明提供实现基于java端多叉树对象增删改查服务的方法,该方法包括以下步骤:s1设置数据库端的单表对象及其外键,其中,数据库端的持久层框架采用mybatis;s2根据外键关系确定主表和多个子表,建立多组一对多关系的主子表,进而形成多叉树对象;所述多叉树对象为可递归的多层主子表结构,其中,存在一个主表,根据所述主表构建多个子表,所述子表为非末级子表或单表,所述非末级节点继续构建下一级的子表,直至均为单表;s3根据一对多关系的主子表的外键关系,构建多个复合表,并插入到对应的位置,所述复合表将存在外键关系的多个表的属性变量整合至一个表中,所述复合表均为非末级子表;s4将得到的多个复合表表达在java端;s5根据外键关系构建复合表的增删改查服务接口及其实现,进而构建多叉树对象
所对应的复合表的增删改查服务。
8.进一步的,包括:所述复合表的属性变量包括两部分,一部分是非数组变量,其元素继承自主表对象中的属性字段;另一部分是数组变量,该数组变量的元素为子表对象;非数组变量和数组变量的元素之间构成了一对多的主子表关系。
9.进一步的,包括:若当前主表和其他复合表之间存在一对多主子表外键,则在java端构建一个当前复合表,且其他复合表作为当前复合表的数组变量。
10.进一步的,包括:每个复合表的每个属性变量都具有相应的get和set方法。
11.进一步的,包括:所述步骤s5中,根据外键关系构建复合表的增删改查服务接口及其实现包括:若复合表yyy的对象内部包含主表对象ttt及子表对象ppp,其中,主表对象ttt和子表对象ppp均为单表或者复合表,且子表对象ppp为一个或多个,子表对象有指向主表对象ttt的外键值;若子表对象ppp为复合表,则其构建增删改查服务的方法为:利用spring的bean装配以及springboot2的注解技术,并根据多叉树复合表对象为可递归的多层主子表的结构特点,首先,逐级构建子表节点对象增删改查操作的服务接口并将其创建为bean,然后,再构建主表节点对象即复合表的增删改查操作的服务接口,在实现复合表增删改查操作的服务接口时,需要装配并调用主表对象及子节点对象增删改查操作服务的bean,并通过注解使得对复合表的增删改查操作具备事务管理的能力;在接口实现对象yyyserviceimpl中,若子表对象中存在单表,则需要装配子表对象ppp的增删改查服务pppservice及数据库访问服务pppmapper的bean,若子表对象中存在复合表,还需要装配子表中复合表的增删改查服务pppservice的bean,同时需要通过注解实现对象复合表yyy增删改查操作的事务管理能力;否则,若yyy的子表均为末级节点,不包含复合表,则不需要装配并调用复合表的bean服务接口,否则,装配并调用复合表的bean服务接口。
12.进一步的,包括:所述若子表对象ppp为复合表,则其构建增删改查服务的方法,还包括:若子表对象ppp的主表和子表均为单表,则对单表进行增删改查,否则,若ppp的子表中仍存在复合表,则逐级对子表节点对象进行增删改查,直至主表和子表均为单表。
13.进一步的,包括:复合表的增删改查服务接口中,特别是子表节点对象的增删改查操作的服务接口中,不仅包含根据复合表对象值进行增删改查的方法,也包含根据外键值进行新增的方法,以支持在多叉树结构中被其它节点调用并提供相关服务。
14.进一步的,包括:所述步骤s5中,构建多叉树对象所对应的复合表的增删改查服务,具体包括:确定多叉树对象中的复合表,表名记为:zzz,该对象内部包含主表对象及子表对象,并确认子表对象中存在的末级节点和非末级节点;
在接口实现对象zzzserviceimpl中,基于外键关系调用非末级节点的增删改查服务接口,接口实现对象zzzserviceimpl内部采用spring注解的方式,装配并调用bean服务接口,通过各级复合表bean的装配和调用,逐层递归分解,并由下一级的主子表对象的增删改查服务来支撑实现,只有在末级节点的服务中,才涉及对数据库表的增删改查操作,且是对单表的操作,而在非末级节点的服务中,只是对java对象实例的操作。
15.进一步的,包括:该方法还包括:构建需要对外提供请求响应的服务,具体的:多叉树对象增删改查的请求响应的服务,以spring的注解方式构建相应的控制器对象,其控制器对象文件*.java保存在/controller/目录中。
16.有益效果:(1)本发明利用java生态中的bean技术以及tk.mybatis的数据库操作的封装技术,在java端而不是在数据库端实现了对多叉树对象增删改查服务的方法,因此,在应用软件的系统开发及业务流程设计中,将设计对象统一归纳为对多叉树对象的设计、开发、业务逻辑织入、修改和维护,灵活性更好,并使得java端的可过程化的业务逻辑控制优势得以充分发挥;(2)由于java端springboot2可通过注解方式对bean服务的快速整合、自动装配的特点,使得java端分层设计、开发、测试、修改、维护的优势得以充分发挥,且java端只有单表对象才涉及对数据库访问的操作,减少了系统开发维护的工作量;(3)对多叉树对象中复合表的增删改查服务的接口及实现,由于在结构上与多叉树对象是一样的,都是可递归的多层主子表结构,这样可以采用模板引擎的方式,根据多叉树对象的初始设计文件,在java端自动生成多叉树对象及其增删改查服务相关的各种java文件和代码,可大大的减少开发人员的工作量。
附图说明
17.图1是本发明所述的基于java端多叉树对象增删改查服务的实现方法流程图;图2是本发明实施例所述的数据库端的表单对象框图;图3是本发明实施例所述的java端的表单对象框图;图4是本发明实施例所述的java端的表单对象简化图;图5是本发明实施例所述的多叉树对象框图;图6是本发明实施例所述的一个复合表的框图;图7是本发明实施例所述的加入复合表后的多叉树对象框图;图8是本发明实施例所述的单表的数据库访问服务接口构建框图;图9是本发明实施例所述的单表customerserviceimpl的接口实现关系图;图10是本发明实施例所述的复合表fhorderrdetail1serviceimpl的接口实现结构关系图;图11是本发明实施例所述的复合表fhcustomer1serviceimpl的接口实现结构关系图;图12是本发明实施例所述的fhcustomer1serviceimpl接口框图;图13是本发明实施例所述的中对比多叉树对象fhcustomer1的结构框图。
具体实施方式
18.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.在关系型数据库中,基于主键、外键连接而成的多层主子表视图就构成了一种典型的多叉树对象。单表,可以看作是多叉树对象的一个特例。
20.在应用软件的系统设计及业务流程设计中,其设计对象可统一归纳为对多叉树对象的设计、开发、业务逻辑织入、修改和维护。
21.基于java的springboot2、mybatis等构建的系统代码框架具有分层设计开发、快速整合和自动装配的特点,其代码目录可分为控制层(controller)、实体类层(domain)、服务层(service)、数据库访问层(dao和mapper),很方便对业务过程的测试、调试、修改和维护。但是每个数据库操作对象,必须要有一个实体的java类与数据库表对应。
22.本发明提出了一种在java端实现对多叉树对象增删改查服务的方法,解决了如下问题:多叉树对象的业务逻辑由底层的数据库端转移到了java端,使得java端的可过程化的业务逻辑控制优势得以充分发挥。
23.多叉树对象服务的实现,由数据库的sql底层转移到了java端的服务层(service),由于java端springboot2可通过注解方式对bean服务的快速整合、自动装配的特点,使得java端分层设计、开发、测试、修改、维护的优势得以充分发挥,且java端只需要使用单表java对象与数据库端的表进行对应,大大减少了系统开发、修改、维护的工作量。
24.在java端,对多叉树对象常规的增删改查服务实现的结构,与多叉树对象的结构是一样的,都是可递归的多层主子表结构,这样可支持采用模板引擎的方式自动生成代码。
25.如图1所示,本发明提供基于java端多叉树对象增删改查服务的实现方法,该方法包括以下步骤:s1设置数据库端的单表对象及其外键,所述数据库持久层框架采用mybatis;s2设置java端的单表对象,单表对象的每个属性具有相应的get、set方法,且所述java端的开发体制为基于java的springboot2;s3根据外键关系确定主表和多个子表,建立多组一对多关系的主子表,进而形成多叉树对象;s4多叉树对象为可递归的多层主子表结构,即存在一个主表,从所述主表构建多个子表,所述子表为非末级子表或单表,所述非末级节点继续构建下一级的子表,直至均为单表,根据一对多主子表的外键关系,构建多个复合表,并插入到对应的位置,所述复合表将存在外键关系的多个表的属性变量整合至一个表中,所述复合表且均为非末级子表。
26.复合表的属性变量包括两部分,一部分是非数组变量,其元素继承自主表对象中的属性字段;另一部分是数组变量,该数组的元素为子表对象;非数组变量和数组变量的元素之间构成了一对多的主子表关系。
27.若当前主表和其他复合表之间存在一对多主子表外键,则在java端构建一个当前复合表,且其他复合表作为当前复合表的数组变量。
28.每个复合表的每个属性变量都具有相应的get、set方法,以方便bean的装配s5将得到的多个复合表表达在java端;s6利用tk.mybatis中的抽象类接口构建单表的数据库访问服务接口及其实现和增删改查服务接口,所述单表为末级子表,其在数据库端不定义任何外键关联和约束。
29.步骤s6中,构建单表的数据库访问服务接口采用的是抽象类接口对象mapper及java 的泛型技术,其文件名为xxxmapper.java,其继承了tk.mybatis中的抽象类泛型接口对象mapper,且泛型的数据类型为单表对象xxx,根据mybatis可以构建单表的数据库访问服务接口的实现,其文件扩展名为xxx.xml,其中,xxx为单表名。
30.步骤s6中,构建单表的增删改查服务接口包括:单表xxx的增删改查服务接口对象为xxxservice,文件名为xxxservice.java,其继承了tk.mybatis中的抽象类泛型接口对象service,且泛型的数据类型为单表对象xxx;xxxservice的接口实现对象为xxxserviceimpl,文件名为xxxserviceimpl.java,其继承了tk.mybatis中的抽象类泛型接口实现对象abstractservice,且泛型的数据类型也为单表对象xxx;在接口实现对象xxxserviceimpl中,需要对数据库操作的部分,采用spring的注解方式,装配并调用了xxxmapper这个bean服务接口,以完成对单表xxx的数据库访问操作。
31.s7利用java的接口技术,构建复合表的增删改查服务接口及其实现,进而找到多叉树对象所对应的复合表,构建复合表的增删改查服务。
32.步骤s7中,利用java的接口技术,构建复合表的增删改查服务接口及其实现包括:若复合表yyy的对象内部包含主表对象ttt及子表对象ppp,复合表yyy的增删改查服务接口对象为yyyservice,文件名为yyyservice.java;yyyservice的接口实现对象为yyyserviceimpl,文件名为yyyserviceimpl.java;若复合表yyy的对象内部包含主表对象ttt及子表对象ppp,其中,主表对象ttt和子表对象ppp均为单表或者复合表,且子表对象ppp为一个或多个,子表对象有指向主表对象ttt的外键值;若子表对象ppp为复合表,则其构建增删改查服务的方法为:利用spring的bean装配以及springboot2的注解技术,并根据多叉树复合表对象为可递归的多层主子表的结构特点,首先,逐级构建子表节点对象增删改查操作的服务接口并将其创建为bean,然后,再构建主表节点对象即复合表的增删改查操作的服务接口,在实现复合表增删改查操作的服务接口时,需要装配并调用主表对象及子节点对象增删改查操作服务的bean,并通过注解使得对复合表的增删改查操作具备事务管理的能力;在接口实现对象yyyserviceimpl中,若子表对象中存在单表,则需要装配子表对象ppp的增删改查服务pppservice及数据库访问服务pppmapper的bean,若子表对象中存在复合表,还需要装配子表中复合表的增删改查服务pppservice的bean,同时需要通过注解实现对象复合表yyy增删改查操作的事务管理能力;具体的,在接口实现对象yyyserviceimpl中,对数据库操作的部分,采用spring注解的方式,装配并调用了tttmapper、pppmapper这两个bean服务接口,以完成对单表ttt及ppp的数据库访问操作;在接口实现对象yyyserviceimpl中,对单表进行增删改查的部分,采用spring注
解的方式,装配并调用了tttservice、pppservice这两个bean服务接口,以完成对单表ttt及ppp的增删改查操作。
33.否则,若yyy的子表均为末级节点,不包含复合表,则不需要装配并调用复合表的bean服务接口,否则,装配并调用复合表的bean服务接口。
34.所述若子表对象ppp为复合表,则其构建增删改查服务的方法,还包括:若子表对象ppp的主表和子表均为单表,则对单表进行增删改查,否则,若ppp的子表中仍存在复合表,则逐级对子表节点对象进行增删改查,直至主表和子表均为单表。
35.复合表的增删改查服务接口中,特别是子表节点对象的增删改查操作的服务接口中,不仅包含根据复合表对象值进行增删改查的方法,也包含根据外键值进行新增的方法,以支持在多叉树结构中被其它节点调用并提供相关服务。
36.步骤s7中,找到多叉树对象所对应的复合表,构建复合表的增删改查服务,具体包括:确定多叉树对象中的复合表,表名记为:zzz,该对象内部包含主表对象及子表对象,并确认子表对象中存在的末级节点和非末级节点;在接口实现对象zzzserviceimpl中,采用spring注解的方式,装配并调用bean服务接口,通过各级复合表bean的装配和调用,逐层递归分解,并由下一级的主子表对象的增删改查服务来支撑实现,只有在末级节点的服务中,才涉及对数据库表的增删改查操作,且是对单表的操作,而在非末级节点的服务中,只是对java对象实例的操作。
37.s8 该方法还包括:构建需要对外提供请求响应的服务,具体的:多叉树对象增删改查的请求响应的服务,以spring的注解方式构建相应的控制器对象,其控制器对象文件*.java保存在/controller/目录中。
38.为了更加直观的说明上述技术方案,本技术举出以下实施例:本系统的开发体制为基于java的springboot2,数据库持久层框架采用mybatis,springboot2支持bean的自动装配和整合,持久层方面需要使用tk.mybatis工具插件,tk.mybaits可通过抽象类接口和泛型技术对单表的增删改查操作進行分层封装。
39.java端的文件目录分为:/domain/:java端的单表对象文件目录,文件扩展名为*.java,数据库端的每个单表在java端都有一个单表对象与之对应。文件名例如customer.java。
40./dto/:java端的复合表对象文件目录,文件扩展名为*.java,文件名例如fhcustomer1.java。
41./dao/:基于tk.mybaits的数据库访问服务接口文件的目录,文件扩展名为*.java,该目录下文件定义了对数据库端单表操作服务的接口。文件名例如customermapper.java。
42./common/:基于泛型类型的抽象类接口及实现的对象文件目录,文件扩展名为*.java,该目录下文件定义了基于泛型的抽象类接口对象文件及其实现的对象文件。文件名例如service.java、abstractservice.java。
43./service/:单表或复合表对象增删改查服务的接口文件目录,文件扩展名为*.java,该目录下文件定义了单表或复合表对象增删改查服务的接口。文件名例如customerservice.java、fhcustomer1service.java。
44./serviceimpl/:单表或复合表对象增删改查服务的接口实现文件目录,文件扩展名为*.java,该目录下文件定义了单表或复合表对象增删改查服务接口的实现。文件名例如customerserviceimpl.java、fhcustomer1serviceimpl.java。。
45./controller/:控制器文件目录,文件扩展名为*.java,该目录下文件定义了需要对外提供请求响应的服务,包括多叉树对象增删改查的请求响应的服务。文件名例如customercontroller.java、fhcustomer1controller.java。
46.多叉树对象在java端的分解及表达,首先,多叉树,是根据单表之间的外键关系所构成的树。
47.如图2所示,首先,设置数据库端的单表对象及其外键,如图3所示,java端的单表对象(带setter和getter),java端的单表对象的每个属性具有相应的get、set方法,以方便bean的装配。java端的单表对象文件,都保存在/domain/目录,如图4所示为java端的单表对象简化示意图。
48.其次,根据外键关系构建的一个多叉树对象,如图5所示,订单明细表orderrdetail包含所属订单的外键orderrid,该字段值取自订单表orderr中的id值,因此,在订单orderr和订单明细orderrdetail之间可以建立一对多关系的主子表。
49.同样,订单表orderr和产品表product中都包含所属客户的外键customerid,该字段值取自客户表customer中的id值,因此在客户customer和订单表orderr和产品表product之间可以分别建立一对多关系的主子表。
50.因此,根据外键关系可以建立一个纵向为3级、横向为2级的多叉树对象。
51.根据外键关系构建java端的复合表对象,根据一对多主子表的外键关系,可以构建复合表,复合表属性变量由两部分组成,一部分是非数组变量,其元素继承自主表对象中的属性字段;一部分是数组变量,该数组的元素为子表对象;非数组变量和数组变量的元素之间构成了一对多的主子表关系。
52.无论非数组变量,还是数组变量,复合表对象中的每个属性具有相应的get、set方法,以方便bean的装配。
53.例如:根据订单orderr和订单明细orderrdetail之间的一对多主子表外键orderrid,可以在java端构建一个复合表fhorderrdetail1。如图6所示:复合表fhorderrdetail1中的属性变量由两部分组成,一部分是非数组变量,其元素继承自单表对象orderr中的属性字段,其中包含指向客户单表customer的外键customerid;一部分是数组变量,该数组的元素为对象orderrdetail;非数组变量orderr和数组变量的元素orderrdetail之间构成了一对多的主子表关系。
54.同样,根据客户customer和产品product之间的一对多主子表外键customerid,以及客户customer和复合表fhorderrdetail1之间的一对多主子表外键customerid,可以在java端构建一个复合表fhcustomer1,其中非数组变量为继承自单表customer的属性字段,为主表;数组变量有两个,一个数组变量的元素是product,另一个数组变量的元素是复合表fhorderrdetail1,非数组变量和两个数组变量的元素之间分别构成了一对多的主子表关系,如图7所示。复合表对象fhorderrdetail1和fhcustomer1的文件保存在/dto/目录。
55.接着,多叉树对象在java端的表达。由图7的结构可知,复合表fhcustomer1为多叉树对象在java端的表达。java端的多叉树对象为可递归的多层主子表结构,逐层分解后,如
果分解后的节点不再包含子表,则该节点为末级节点,该节点对应的表为单表;如果仍然包含子表,则该节点为非末级节点,该节点对应的表为复合表。
56.且多叉树对象经逐层分解,其各节点中,customer、product、orderr、orderrdetail为末级节点,fhcustomer1和fhorderrdetail1为非末级节点。
57.通过递归分解,多叉树对象可以看作为最顶层节点的复合表。在前面示例中,最顶层节点的复合表对象fhcustomer1即可看作是多叉树对象。
58.每个节点的复合表都具有相同的结构,都是由两级主子表构成,子表可能有多个,但是子表可能是复合表、也可能是单表,单表,在数据库端不定义任何外键关联和约束。
59.逐层递归分解后的末级,即单表,其java对象的属性具有相应的get、set方法,方便bean的装配。且通过mybatis持久层框架与数据库中的单表一一对应。
60.其中,每个复合表的每个属性都具有相应的get、set方法,以方便bean的装配。
61.最后,根据tk.mybatis构建单表的数据库访问服务利用tk.mybatis中的抽象类接口对象mapper及java 的泛型技术,可以构建单表的数据库访问服务接口,其文件扩展名为*.java。
62.根据mybatis可以构建单表的数据库访问服务接口的实现,其文件扩展名为*.xml。
63.以客户customer单表为例,单表customer数据库访问服务接口对象为customermapper,文件名为customermapper.java,其继承了tk.mybatis中的抽象类泛型接口对象mapper,且泛型的数据类型为单表对象customer,如图8所示。由于tk.mybatis工具插件中抽象类接口对象mapper中封装了数据库各种操作的sql语句,因此,所有单表的数据库访问服务接口及其实现,不需要开发人员再写任何sql语句代码。
64.单表的数据库访问服务接口,可以作为bean被其它对象实例装配和调用。
65.数据库访问服务接口对象文件*.java都保存在/dao/目录。
66.数据库访问服务接口实现的对象文件*.xml都保存在/resources/mapper/目录。
67.根据tk.mybatis构建单表的增删改查服务利用tk.mybatis中的抽象类泛型服务接口service及其实现abstractservice,就可以构建单表的增删改查服务接口。
68.在接口实现的涉及数据库操作的部分,可以采用spring的注解方式,装配并调用相关的bean服务接口,以完成对单表的数据库访问操作。
69.以客户customer单表为例,单表customer的增删改查服务接口对象为customerservice,文件名为customerservice.java,其继承了tk.mybatis中的抽象类泛型接口对象service,且泛型的数据类型为单表对象customer。
70.customerservice的接口实现对象为customerserviceimpl,文件名为customerserviceimpl.java,其继承了tk.mybatis中的抽象类泛型接口实现对象abstractservice,且泛型的数据类型也为单表对象customer。
71.在接口实现对象customerserviceimpl中,需要对数据库操作的部分,采用spring的注解方式,装配并调用了customermapper这个bean服务接口,以完成对单表customer的数据库访问操作。单表customer的增删改查服务接口customerservice及其实现customerserviceimpl的结构关系,如图9所示。根据单表增删改查服务所需的基本方法,利
用java的泛型和抽象类接口技术,构建泛型类型抽象类接口对象service及其接口实现abstractservice。
72.利用spring的bean装配、springboot2的注解技术及java的泛型和抽象类接口技术,根据多叉树中每个单表的外键连接关系及单表增删改查所需的方法,构建单表的增删改查服务接口,在实现该接口时,需要装配并调用单表的数据库访问服务的bean,并通过@transaction注解使得对单表的增删改查操作具备事务管理的能力。
[0073] 单表的增删改查服务接口中,不仅包含根据表对象值進行增删改查的方法,也包含根据外键值進行增、删的方法,以支持在多叉树结构中被其它节点调用并提供相关服务。
[0074]
单表的增删改查服务接口,可以作为bean被其它对象实例装配和调用单表的增删改查服务接口对象文件*.java都保存在/service/目录。
[0075]
单表的增删改查服务接口实现的对象文件*.java都保存在/serviceimpl/目录。
[0076]
抽象类接口对象文件service.java及其接口实现文件abstractservice.java保存在/common/目录。
[0077]
以产品product单表为例,在多叉树结构中,product具有指向customer的外键值。单表product的增删改查服务接口文件名为productservice.java,其利用并继承了抽象类泛型接口对象service,且泛型的数据类型为单表对象product。
[0078]
productservice的接口实现文件名为productserviceimpl.java,其继承了抽象类泛型接口实现对象abstractservice,且泛型的数据类型也为单表对象product。
[0079]
在接口实现对象productserviceimpl中,需要为上级节点提供外键服务的方法有createbycustomerid和deletebycustomerid,需要对数据库操作的部分,采用spring的注解方式,装配并调用了productmapper这个bean服务接口,以完成对单表product的数据库访问操作。
[0080]
复合表fhorderrdetail1的增删改查服务接口fhorderrdetail1service及其实现fhorderrdetail1serviceimpl的结构关系,如图10所示。
[0081]
根据外键关系构建复合表的增删改查服务,包括:s81利用spring的bean装配以及springboot2的注解技术,并根据多叉树复合表对象为可递归的多层主子表的结构特点,先逐级构建子表节点对象增删改查操作的服务接口并将其创建为bean,然后再构建主表节点对象即复合表的增删改查操作的服务接口,在实现复合表增删改查操作的服务接口时,需要装配并调用主表对象及子节点对象增删改查操作服务的bean,并通过@transaction注解使得对复合表的增删改查操作具备事务管理的能力。
[0082]
s82复合表的增删改查服务接口中,特别是子表节点对象的增删改查操作的服务接口中,不仅包含根据复合表对象值進行增删改查的方法,也包含根据外键值進行新增的方法,以支持在多叉树结构中被其它节点调用并提供相关服务。
[0083]
s83复合表的增删改查服务接口对象文件*.java都保存在/service/目录。
[0084]
s84 复合表的增删改查服务接口实现的对象文件*.java都保存在/serviceimpl/目录。
[0085]
以多叉树复合表对象fhcustomer1为例,如前图10所示,其主表节点对象即为fhcustomer1自身,主表为customer,为单表;其子表节点对象有两个,一个是product,为单
表,一个是fhorderrdeatil1,为复合表,两者都有指向主表customer的外键值;复合表fhorderrdetail1的增删改查服务接口的构建需要根据前面s1和s2的方法先构建。
[0086]
复合表fhorderrdetail1的主节点对象即为fhorderrdetail1自身,主表为orderr,为单表;其子表节点对象有一个,是单表orderrdetail,单表orderr及orderrdetail的增删改查服务接口为orderrservice、orderrdetailservice,在前面已构建并实现,并被创建为bean。
[0087]
复合表fhorderrdetail1的增删改查服务接口为fhorderrdetail1service,在fhorderrdetail1serviceimpl中实现该接口时,对复合表fhorderrdetail1的增删改查的具体操作,涉及到对主、子表对象的增删改查操作及对数据库访问的操作,因此需要装配orderrservice、orderrdetailservice、orderrmapper、orderrdetailmapper等服务接口的bean,同时需要通过@transaction注解实现对复合表fhorderrdetail1增删改查操作的事务管理能力。
[0088]
同样根据前面s81和s82的方法构建复合表fhcustomer1的增删改查服务接口fhcustomer1service,在fhcustomer1serviceimpl中具体实现该接口中增删改查操作时,需要装配主表customer的增删改查服务customerservice及数据库访问服务customermapper的bean,还需要装配子表product的增删改查服务productservice及数据库访问服务productmapper的bean,还需要装配子表中复合表fhorderrdetail的增删改查服务fhorderrdetailservice的bean,同时需要通过@transaction注解实现对象复合表fhcustomer1增删改查操作的事务管理能力。
[0089]
根据图10可知,fhorderrdetail1service中包含了外键相关的方法createbycustomerid,可支持在多叉树结构中被其它节点调用并提供相关服务。
[0090]
在接口实现对象fhcustomer1serviceimpl中,采用spring注解的方式,装配并调用了customermapper、customerservice、productmapper、productservice、orderrservice、fhorderrdetail1service等bean服务接口,如图11所示,由于fhcustomer1在多叉树结构的顶端,fhcustomer1service中不再包含外键相关的方法,即不再需要提供外键相关服务被其它节点调用。
[0091]
fhcustomer1service接口示例代码:publicinterfacefhcustomer1service{longcreate(fhcustomer1fhcustomer1);longdelete(longid);longupdate(fhcustomer1fhcustomer1);fhcustomer1read(longid);}fhcustomer1serviceimpl接口中实现“新增fhcustomer1复合表”即create方法的示例代码:@service@transactionalpublicclassfhcustomer1serviceimplimplementsfhcustomer1service{@resourceprivatecustomermappercustomermapper;@resourceprivatecustomerservicecustomerservice;@resourceprivateproductmapperproductmapper;@resourceprivateproductserviceproductservice;@resourceprivateorderrserviceorderrservice;@resourceprivatefhorderrdetail1servicefhorderrdetail1service;@overridepubliclong
create(fhcustomer1fhcustomer1){//新增主表customercustomer=newcustomer();beanutils.copyproperties(fhcustomer1,customer);customer.setid(null);if(customermapper.insert(customer)》0);updatenum.getandadd(customer.getid());//新增叶类子表list《product》products=newarraylist《》();fhcustomer1.getproductsbycustomerid().foreach(a-》{productproduct=newproduct();beanutils.copyproperties(a,product);product.setid(null);product.setcustomerid(customer.getid());products.add(product);});if(products.size()》0)productmapper.insertlist(products);//新增非叶类子表list《fhorderrdetail1》fhorderrdetail1s=fhcustomer1.getfhorderrdetail1sbycustomerid();fhorderrdetail1s.foreach(a-》{fhorderrdetail1service.createbycustomerid(a,customer.getid());});returncustomer.getid();}
[0092]
}}从上面的示例代码可见,接口实现对象fhcustomer1serviceimpl中,注解@service,表明接口fhcustomer1service可以作为bean服务被其它对象装配和调用;注解@transaction,表明接口中所有方法的实现,具备事务管理的能力;注解@resource,表明装配并将调用bean服务接口customermapper、customerservice、productmapper、productservice、orderrservice、fhorderrdetail1service;在create方法中实现“新增fhcustomer1复合表”时,涉及到对主表为单表的customer的操作,调用了数据库访问服务的bean实例customermapper中的方法insert,涉及到对子表为单表的product的操作,调用了数据库访问服务的bean实例productmapper中的方法insertlist,涉及到对子表为复合表的fhorderrdetail1的操作,调用了复合表增删改查服务的bean实例fhorderrdetail1service中的方法createbycustomerid。
[0093]
而fhorderrdetail1service中的方法createbycustomerid又是如何实现的呢。
[0094]
fhorderrdetail1service接口示例代码:publicinterfacefhorderrdetail1service{longcreatebycustomerid(fhorderrdetail1fhorderrdetail1,longid);longcreate(fhorderrdetail1fhorderrdetail1);longdelete(longid);longupdate(fhorderrdetail1fhorderrdetail1);fhorderrdetail1read(longid);}注意fhorderrdetail1service接口中,除了增删改查方法create、delete、update、read,还有一个根据外键值新增复合表fhorderrdetail1的方法createbycustomerid。
[0095]
fhorderrdetail1serviceimpl接口实现中实现“根据外键值新增复合表fhorderrdetail1”即createbycustomerid方法的示例代码:@service@transactionalpublicclassfhorderrdetail1serviceimplimplementsfhorderrdetail1service{@resourceprivateorderrmapperorderrmapper;@resourceprivateorderrserviceorderrservice;@resourceprivateorderrdetailmapperorderrdetailmapper;@resourceprivate orderrdetailserviceorderrdetailservice;
@overridepubliclongcreatebycustomerid(fhorderrdetail1fhorderrdetail1,longid){//主表orderrorderr=neworderr();beanutils.copyproperties(fhorderrdetail1,orderr);orderr.setid(null);orderr.setcustomerid(id);if(orderrmapper.insert(orderr)》0);updatenum.getandadd(orderr.getid());//叶类子表list《orderrdetail》orderrdetails=newarraylist《》();fhorderrdetail1.getorderrdetailsbyorderrid().foreach(a-》{orderrdetailorderrdetail=neworderrdetail();beanutils.copyproperties(a,orderrdetail);orderrdetail.setid(null);orderrdetail.setorderrid(orderr.getid());orderrdetails.add(orderrdetail);});if(orderrdetails.size()》0)orderrdetailmapper.insertlist(orderrdetails);returnorderr.getid();}
[0096]
}}从上面的示例代码可见,接口实现对象fhorderrdetail1serviceimpl中,在“根据外键值新增复合表fhorderrdetail1”的createbycustomerid方法中,orderr.setcustomerid(id)语句实现了将外键值赋值给主表的外键字段;主表的新增,调用了数据库访问服务的bean实例orderrmapper中的方法insert;构建子表时,fhorderrdetail1.getorderrdetailsbyorderrid().foreach语句实现了对输入对象参数fhorderrdetail1中子表数组元素的遍历;orderrdetail.setorderrid(orderr.getid())语句实现了将外键值赋值给子表的外键字段;子表数组的新增,调用了数据库访问服务的bean实例orderrdetailmapper中的方法insertlist。
[0097]
在调用的bean服务接口中,由于fhorderrdetail1service为复合表的增删改查服务接口,其内部也采用spring注解方式,装配并调用了其它的bean服务,展开后的fhcustomer1serviceimpl接口实现对象结构,如图12所示。
[0098]
找到多叉树对象所对应的复合表,同样首先,构建复合表的增删改查服务。其中,在复合表增删改查服务接口的实现中,涉及对其它复合表增删改查操作的部分,可以采用spring的注解方式,装配并调用其它复合表增删改查操作相关的bean服务接口,以完成对复合表的增删改查的操作。
[0099]
这样,通过各级复合表bean的装配和调用,多叉树对象增删改查服务的接口和实现,可以逐层递归分解,并由下一级的主子表对象的增删改查服务来支撑实现。只有在末级节点的服务中,才涉及对数据库表的增删改查操作,且是对单表的操作。而在非末级节点的服务中,只是对java对象实例的操作。
[0100]
以复合表fhcustomer1为例,该复合表就是多叉树对象在java端的表达,该对象内部包含主表对象customer及两个子表对象,分别为product和fhorderrdetail1,其中,product为末级节点,而fhorderrdetail1为非末级节点。
[0101]
复合表fhcustomer1及fhorderdetail1的接口及实现的结构框图见图10和图11。
[0102]
在接口实现对象fhcustomer1serviceimpl中,基于外键关系调用了fhorderrdetail1service增删改查服务接口,其内部也采用spring注解方式,装配并调用
了其它的bean服务,展开后的fhcustomer1serviceimpl接口实现对象结构对比多叉树对象fhcustomer1的结构,如下图13所示,复合表增删改查服务fhcustomer1service和复合表对象fhcustomer1具有相同的迭代结构最后,构建需要对外提供请求响应的服务需要对外提供请求响应的服务,包括多叉树对象增删改查的请求响应的服务,可以以spring的注解方式构建相应的控制器对象,其控制器对象文件*.java保存在/controller/目录。
[0103]
例如:单表product的增删改查服务的控制器对象为productcontroller,复合表fhorderrdetail1的控制器对象为fhorderrdetail1controller,复合表fhcustomer1的控制器对象为fhcustomer1controller。
[0104]
综上,java端的多叉树对象为可递归分解的多层主子表结构。逐层分解后,如果节点不再包含子表,则该节点为单表,其java对象对应数据库中的单表;如果仍然包含子表,则该节点为复合表,其子表为list数组类型。
[0105]
每个节点的复合表都具有相同的结构,都是由两级主子表构成,子表可能有多个,但是子表可能是复合表、也可能是单表。
[0106]
单表或复合表,其java对象的属性中,均有get和set方法,以方便bean的装配。
[0107]
对单表及各级节点复合表操作,均封装成java技术中的bean,其增删改查服务可以方便的在他处被自动装配和调用。
[0108]
只有单表的增删改查操作,才涉及对数据库中表的操作。
[0109]
对单表常规的数据库操作,使用tk.mybatis進行封装,不需要开发人员再写sql语句。
[0110]
对多叉树对象的增删改查服务的接口及实现,在结构上与多叉树对象是一样的,都是可递归的多层主子表结构。
[0111]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0112]
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1