CN112748908B - 基于SSM框架的Restful服务开发方法与装置 - Google Patents
基于SSM框架的Restful服务开发方法与装置 Download PDFInfo
- Publication number
- CN112748908B CN112748908B CN202011642336.XA CN202011642336A CN112748908B CN 112748908 B CN112748908 B CN 112748908B CN 202011642336 A CN202011642336 A CN 202011642336A CN 112748908 B CN112748908 B CN 112748908B
- Authority
- CN
- China
- Prior art keywords
- layer
- module
- service
- code
- file
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000013499 data model Methods 0.000 claims abstract description 48
- 238000007726 management method Methods 0.000 claims abstract description 40
- 238000011161 development Methods 0.000 claims abstract description 35
- 238000004891 communication Methods 0.000 claims abstract description 17
- 238000013524 data verification Methods 0.000 claims abstract description 15
- 230000002688 persistence Effects 0.000 claims abstract description 13
- 238000004806 packaging method and process Methods 0.000 claims abstract description 7
- 230000002085 persistent effect Effects 0.000 claims description 49
- 238000012795 verification Methods 0.000 claims description 36
- 238000005516 engineering process Methods 0.000 claims description 10
- 238000012986 modification Methods 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 8
- 238000012217 deletion Methods 0.000 claims description 7
- 230000037430 deletion Effects 0.000 claims description 7
- 238000013461 design Methods 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 6
- 235000010627 Phaseolus vulgaris Nutrition 0.000 claims description 5
- 244000046052 Phaseolus vulgaris Species 0.000 claims description 5
- 238000007792 addition Methods 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 claims description 5
- 238000009517 secondary packaging Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 4
- 238000012423 maintenance Methods 0.000 abstract description 5
- 230000018109 developmental process Effects 0.000 description 26
- 230000006399 behavior Effects 0.000 description 9
- 230000008901 benefit Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 3
- 238000013475 authorization Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013502 data validation Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 230000007306 turnover Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于SSM框架的Restful服务开发方法与装置,该方法包括:定义通讯协议及格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,实现控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系;封装数据及工具;定义目标代码文件的模板文件,根据模板文件生成代码文件,生成数据模型和持久层代码;根据基础模块、工具模块和代码生成模块实现功能管理,自动生成配置文件,数据模型、持久层的代码,以及服务层、控制层代码,在数据模型字段添加基本数据验证,修改服务层的查询条件,根据各功能管理不同的需求分别修改对应功能管理的接口。本发明提高应用服务的开发、维护效率,降低应用服务开发门槛。
Description
技术领域
本发明涉及网络服务开发设计技术领域,具体涉及一种基于SSM框架的Restful服务开发方法与装置。
背景技术
软件系统随着业务的发展,变得越来越复杂,不同领域的业务所涉及到的知识、内容、问题非常非常多。如果每次都从头开发,那都是一个很漫长的事情,且并不一定能将它做好。因此,使用框架进行极速开发,是一种软件开发中极其常用的方案。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成,常作为数据源较简单的web项目的框架。使用SSM框架开发Web应用,Spring其核心是控制反转IOC(Inversion of Control)和面向切面编程AOP(Aspect OrientedProgramming)。IOC使得代码复用,可维护性大大提高,AOP提供切面编程,同时也增加了生成力,但是其繁琐的配置,各种XML、Annotation配置,让人眼花缭乱,而且如果出错了也很难找出原因。另一方面,SSM框架本身只是一个脚手架,并没有对业务模块做任务实现。然而在众多系统开发中,往往会有一些比较常用的功能模块,例如用户信息、角色权限、系统菜单、用户日志、文件信息、数据字典等功能模块,而开发这些功能模块的工作量约占整个项目的10%~30%。每个项目都从头开发的话,造成重复开发、人力资源浪费。
Restful是一种网络应用程序的设计风格和开发方式,基于HTTP可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
SSM框架开发技术基本上满足Restful服务开发的要求,但在使用上同时也存在封装不足的问题,譬如:1、Spring的插件众多,同一个功能实现都有不同的插件可供选择,因此在选用插件的时候就必须对插件的功用、性能、优缺点、使用方法进行学习,这无疑需要程序员花费大量时间翻查相关文档以及封装相关代码;2、Spring的配置项,各个版本可能存在不一样,导致相同的配置文件可能在不同的项目中无法生效,而这种问题又是比较难发现的;3、Mybatis的优点在于灵活与高性能的sql语句,但是缺点同样明显,那就是不支持随意切换数据库,移植性不好;4、对于MVC三层结构的系统,控制层、服务层、持久层代码编写的自由较高,这个是优点,但同样是缺点,基本上每个程序员编写的代码结构都可能不一致。这会对系统后期维护工作造成困难;5、框架中的常用工具包缺少,不能满足应用服务的开发需求,需要各自另外选用第三方工具类库。6、缺少代码生成功能,虽然Mybatis可以自动生成模型、持久层的代码,但是缺少生成控制层、持久层的代码,忽略业务逻辑,这两层的代码结构应该是一致的,若手工编写相关代码比较耗时;7、缺少通用的管理模块,例如用户信息、角色权限、系统菜单、用户日志、文件信息、数据字典、用户验证等,每个新项目都需要重新开发一次。
发明内容
为了克服现有技术存在的缺陷与不足,本发明提供一种基于SSM框架的Restful服务开发方法与装置,对SSM框架的集成进行二次封装,集成成为一个易用、高效、统一的Restful服务开发装置,解决框架集成过程中所引发的配置项、代码复用、代码结构以及框架技术使用等相关开发问题,从而提高应用服务的开发、维护效率,降低应用服务开发门槛。
为了达到上述目的,本发明采用以下技术方案:
本发明提供一种基于SSM框架的Restful服务开发方法,包括下述步骤:
构建基础模块,定义通讯协议、通讯格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,实现控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系;
构建工具模块,封装数据及工具;
构建代码生成模块,定义目标代码文件的模板文件,根据模板文件生成代码文件,生成数据模型和持久层代码;
构建通用模块,所述通用模块根据基础模块、工具模块和代码生成模块实现功能管理,所述代码生成模块根据项目包名自动生成配置文件,根据数据库自动生成数据模型、持久层的代码,根据持久层代码自动生成服务层、控制层代码,在各个数据模型的字段上添加基本的数据验证,修改服务层的查询条件,根据各个功能管理不同的需求,按照控制层代码结构分别修改对应功能管理的接口。
作为优选的技术方案,所述通讯协议采用http/https协议,统一使用POST请求方式,指定访问令牌放到请求头中;
所述定义通讯格式具体包括:定义响应格式,统一使用JSON格式返回,并且限制返回字段;
所述数据验证具体包括:定义验证分组注解,提供给BEAN字段以及访问接口的声明式验证处理使用,定义验证工具类,提供给代码验证方式使用;
所述异常处理具体包括:利用Spring中的控制器增强技术,统一对未处理的异常进行请求响应;
所述基础控制实现类具体包括:以泛型的方式维护其对应的服务层对象、持久层类型、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现增删查改;
所述基础服务接口与实现类具体包括:以泛型的方式维护其对应的持久层对象、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现业务调用持久层的操作数据库。
作为优选的技术方案,所述封装数据及工具,具体包括封装基础操作工具、Excel子工具、文件拆分与合并工具、FTP工具;
所述Excel子工具使用poi技术,对第三方类库进行二次封装,分别实现Excel文件的写入、读取、模板填充的操作;
所述文件拆分与合并工具使用线程同时读取源文件,并行操作目标文件;
所述FTP工具定义客户端操作接口、客户端回调接口,过程监听接口,并实现FTP操作类,编写客户端操作接口的实现类,根据不同业务调用FTP操作类。
作为优选的技术方案,所述定义目标代码文件的模板文件,遵循FreeMarker模板FTL指令规则、插值规则、表达式规则,并统一模板后缀名;
所述根据模板文件生成代码文件,根据FreeMarker模板引擎实现,具体包括:验证传入参数;创建配置对象,并放入参数;读取目标代码文件,并验证是否存在,如果不存在则创建;采用配置对象读取指定的模板文件,并输出写入目标文件;
所述生成数据模型和持久层代码具体采用Mybatis代码生成插件生成数据模型和持久层代码。
作为优选的技术方案,所述根据持久层代码自动生成服务层、控制层代码,生成的代码具体为:
控制层显式声明继承基础模块中的基础控制类,并且生成增删查改接口,每个接口上都使用注解显式声明其路由地址、返回类型以及参数验证;
服务层显式声明继承基础模块中的基础服务类。
本发明还提供一种基于SSM框架的Restful服务开发装置,包括:基础模块、工具模块、代码生成模块和通用模块;
所述基础模块用于定义通讯协议、通讯格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,实现控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系;
所述工具模块封装数据及工具;
所述代码生成模块包括:模板文件、代码生成器、Mybatis代码生成插件;
所述模板文件用于定义目标代码文件的模板,按照基础模块的定义编写模板文件,所述代码生成器用于根据模板文件生成代码文件,所述Mybatis代码生成插件用于生成数据模型和持久层代码;
所述通用模块根据基础模块、工具模块和代码生成模块实现功能管理,所述代码生成模块用于根据项目包名自动生成配置文件,根据数据库自动生成数据模型、持久层的代码,根据持久层代码自动生成服务层、控制层代码,在各个数据模型的字段上添加基本的数据验证,修改服务层的查询条件,根据各个功能管理不同的需求,按照控制层代码结构分别修改对应功能管理的接口。
作为优选的技术方案,所述基础控制实现类具体包括:以泛型的方式维护其对应的服务层对象、持久层类型、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现增删查改;
所述基础服务接口与实现类具体包括:以泛型的方式维护其对应的持久层对象、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现业务调用持久层的操作数据库。
作为优选的技术方案,所述工具模块包括基础操作工具、Excel子工具、文件拆分与合并工具、FTP工具;
所述Excel子工具用于使用poi技术,对第三方类库进行二次封装,分别实现Excel文件的写入、读取、模板填充的操作;
所述文件拆分与合并工具用于使用线程同时读取源文件,并行操作目标文件;
所述FTP工具用于定义客户端操作接口、客户端回调接口,过程监听接口,并实现FTP操作类,编写客户端操作接口的实现类,根据不同业务调用FTP操作类。
作为优选的技术方案,所述通用模块与基础模块的采用分离式设计。
本发明还提供一种存储介质,存储有程序,所述程序被处理器执行时实现如上述基于SSM框架的Restful服务开发方法。
本发明与现有技术相比,具有如下优点和有益效果:
(1)本发明设置代码生成模块生成相关配置文件,无需阅读相关文档,可以自动配置一个SSM框架的项目,操作快速简便;并且代码生成模块生成服务层、控制层代码,既节省编写服务层、控制层的部分代码的操作,又可统一代码结构,控制各层之间的调用关系。
(2)本发明通过对工具模块的封装,既让编程人员不需要关注底层代码的开发,提高了开发效率,又统一了第三方类库的使用。
(3)本发明通过基础模块中的基础服务接口与实现类,以泛型的方式维护其对应的持久层对象、数据模型,再加上持久层、数据模型是由Mybaits根据实际数据库生成出来的方式,可以让本发明应用在基于所有Mybaits支持的数据库的项目开发。
(4)通过引入通用模块的项目,为该项目节省重复开发用户管理、部门管理、职务管理、角色管理、菜单管理、地区管理、文件管理、岗位管理、日志管理、用户授权这些功能,大大加快项目开发的进度。
(5)本发明采用的通用模块与基础模块的分离式设计,为系统管理功能提供高度的可伸缩性,使得扩展层可以自由添加其它功能模块,以备开发项目时有选择引入。
附图说明
图1为本发明的基于SSM框架的Restful服务开发装置框架结构示意图;
图2为本发明控制层、服务层、持久层UML类图;
图3为本发明通用模块的功能结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例
如图1所示,本发明提供一种基于SSM框架的Restful服务开发装置,包括:基础模块、工具模块、代码生成模块和通用模块;
其中,基础模块定义通讯协议、通讯格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,以及实现了控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系。
在本实施例中,数据模型与功能模块是一一对应的关系,即一个数据模型对应着1个功能模块,而1功能模块包含N个功能。这些对应关系在控制层、服务层、持久层间的实现中指定,即1个数据数据模型实现对应的1个控制层、1个服务层、1个持久层,这三层则组成1个功能模块;而这个功能模块每层都分别实现了N个行为,由下层服务的N个行为组装成上层服务的1个行为,就形成本实施例所说的功能。
在本实施例中,通讯协议使用http/https协议实现,统一使用POST请求方式,指定访问令牌放到请求头中。本实施例的框架作为服务端,主要责任是控制,是使用Spring的拦截器技术,实现访问拦截器,拦截所有http/https请求,验证请求方式以及提取访问令牌并放到缓存。
在本实施例中,通讯格式主要是定义响应格式,统一使用JSON格式返回,并且限制返回字段。首先,配置Spring的消息转换器,添加支持JSON格式;其次,定义普通数据返回对象以及分页数据返回对象,最后返回的数据都需要在控制层通过这个两个对象封装一下再返回。
在本实施例中,数据验证使用JSR303标准,依赖Hibernate Validator验证插件。自定义一些验证分组注解,提供给BEAN字段以及访问接口的声明式验证处理使用,用于不同场景下组装验证规则,例如指定某个字段添加数据时非空、编辑数据时为空等,这些自定义注解与验证注解联合使用,这是BEAN的验证方式。另一方面定义验证工具类,提供给代码验证方式使用。
在本实施例中,验证工具类实现的使用代码的手法对数据进行验证,也是BEAN验证方式的一种手法,这个验证工具类作为数据验证功能补充,以便程序员灵活进行数据验证,其实现方式如下:
1、使用Hibernaate Validator创建验证器实例
2、使用验证器实例调用验证方法对指定数据、验证规则进行验证,判断指定的数据是否符合验证规则。
3、如果验证通过,则验证结束;如果验证不通过,则整理验证的结果以及信息,并返回调用者,让其自行处理。
在本实施例中,异常处理利用Spring中的控制器增强技术,统一对未处理的异常进行请求响应。创建一个@ControllerAdvice注解的普通类,对控制器中的Rest接口进行全局监控,再使用@ExceptionHandler注解对各种异常信息进行分类处理。
如图2所示,基础控制实现类以泛型的方式维护其对应的服务层对象、持久层类型、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系;并实现常规的增删查改方法,这些方法统一定义了参数类型、返回值以及调用服务层对象的逻辑,用于控制子类调用时,控制其调用逻辑,其中,限制了指定服务层对象必须是使用对应的持久层对象操作数据模型,从而控制具体的功能模块与数据一一对应。
在本实施例中,实现的逻辑采用通用的增删查改逻辑,譬如以查询列表的功能为例:
1、控制层的查询列表行为,先对请求参数做验证,包括参数是否必须、参数格式等的验证,必要时这里可以自行添加一些默认的参数,然后使用参数调用对应服务层的查询列表行为,最后响应请求。
2、服务层的查询列表行为,先对控制层传递进来的参数,这些参数包括查询的条件、分页条件等,进行组装成查询对象,然后使用调用持久层的查询列表行为,最后向控制层返回数据。
3、持久层的查询列表行为,使用服务层传递进来查询对象,调用mybaits框架查询数据库数据,并把数据映射成数据对象列表,最后向服务层返回数据列表。
结合图2所示,基础服务接口与实现类以泛型的方式维护其对应的持久层对象、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系;并实现业务常规调用持久层的操作数据库的方法,其中,限制了指定持久层对象必须是操作对应数据模型的持久层对象,从而控制具体的功能模块与数据一一对应,默认实现模型参数转换成查询条件的方法protected Example model2Example(M m){}为全等方式,同时使用PageHelper插件扩展分页获取数据库数据。
在本实施例中,工具模块的封装包括常规工具类,封装字符串、数字、日期时间、对象、数据流、集合、数组、文件、文件压缩、数据缓存、数据加解密、Json转换、Http请求、数据结构转换等基础操作。另外封装了Excel、文件拆分与合并、FTP操作的逻辑较复杂的工具。
其中,Excel子工具使用poi技术,对com.alibaba.easyexcel第三方类库进行二次封装,分别实现Excel文件的写入、读取、模板填充的操作。
在本实施例中,写入操作定义写入Handler接口,分别实现从数据库获取数据写入、从数据集合获取数据写入、多数据源写入的Handler,各个Handler维护自己的写入逻辑,对外暴露统一写入方法,不同的场景使用不同的Handler实现业务功能。
在本实施例中,读取操作定义读取Handler接口,分别实现读取数据到数据库、读取数据到集合的Handler,各个Handler维护自己的读取逻辑,对外暴露统一读取方法,不同的场景使用不同的Handler实现业务功能。
在本实施例中,模板填充操作从数据库或者数据集合中获取数据,然后根据已有的EXCEL模板文件,把获取的数据填充进去并生成新的EXCEL文件,这也是属于写入EXCEL文件的操作。本实施例的模板填充操作定义填充Handler接口,分别实现从数据库获取数据填充、从数据集合获取数据填充、多数据源填充的Handler,各个Handler维护自己的填充逻辑,对外暴露统一填充方法,不同的场景使用不同的Handler实现业务功能。
在本实施例中,文件拆分与合并工具使用线程同时读取源文件,并行操作目标文件,对外暴露统一的拆分与合并方法;
文件拆分先按指定大小计算源文件的分块数量,然后按照分块数量建立线程并放进线程池,使用java.util.concurrent.CountDownLatch.CountDownLatch类统一控制线程执行情况。利用java.io.RandomAccessFile可以同时读取文件的特性,在各个分块线程中读取文件源文件,并计算开始位置、结束位置,分别写入各个分块文件中。
文件合并先创建合并后的目标文件对象,然后按照分块源文件建立线程并放进线程池,使用java.util.concurrent.CountDownLatch.CountDownLatch类统一控制线程执行情况。利用java.io.RandomAccessFile可以同时写入文件的特性,在各个线程中读取文件源文件,并计算开始位置、结束位置,分别读取各个分块文件的数据写到目标文件中。
在本实施例中,FTP工具主要对org.apache.commons.net.ftp.FTP进行二次封装,先定义客户端操作接口、客户端回调接口,过程监听接口。然后使用org.apache.commons.net.ftp的API实现FTP操作类。最后编写客户端操作接口的实现类,根据不同业务调用FTP操作类。对外暴露客户端操作接口,这样的设计使用桥接模式,其优点抽象和实现的分离,让FTP工具具有优秀的扩展能力。
在本实施例中,代码生成模块,由模板文件、代码生成器、Mybatis代码生成插件器组成,按照基础模块的相关定义进行编写模板,用于自动生成代码。
模板文件负责定义目标代码文件的模板,遵循FreeMarker模板FTL指令规则、插值规则、表达式规则来实现,并统一模板后缀名为.ftl,已定模板如下:
generator-config.ftl Mybatis代码生成插件配置文件模板
logback-spring.ftl logback日志配置文件模板
yml.ftl 项目配置文件模板
Application.ftl 项目启动文件模板
WebConfiguration.ftl 项目配置类模板
GlobalExceptionHandler.ftl 项目统一异常处理类模板
Service.ftl 服务层接口模板
ServiceImpl.ftl 服务层实现类模板
Controller.ftl 控制层实现类模板
代码生成器负责根据自定义的模板文件生成代码文件,依赖FreeMarker模板引擎来实现,其生成代码的工作流程如下:
首先,验证传入参数,例如项目基础包名、模型包名、持久层包名
其次,创建freemarker.template.Configuration配置对象,并把参数放进去。
然后,读取目标代码文件,并验证是否存在,如果不存在则创建。
最后,使用Configuration配置对象读取指定的模板文件,并输出写入目标文件。
Mybatis代码生成插件使用mybatis-generator-maven-plugin实现,负责生成数据模型、持久层代码。
如图3所示,通用模块的功能已属于业务功能,单独抽取出来作为独立的系统管理模块,以便于各个系统引入使用。其功能包括用户管理、部门管理、职务管理、角色管理、菜单管理、地区管理、文件管理、岗位管理、日志管理和用户授权。
本模块的实现依赖基础模块、工具模块、代码生成模块,并且独立于这三个模块,实现步骤如下:
a)使用代码生成模块根据项目包名自动生成各种配置文件,生成的配置文件有默认的配置,一般只需要修改配置文件里面的连接数据源信息即可。
b)使用Mybatis代码生成插件根据数据库自动生成数据模型、持久层的代码。这个操作参考org.mybatis.generator插件的用法,先配置好generator-config.xml文件,指定上述功能模块所需要生成代码的数据表,然后使用Maven执行mybatis-generator:generate命令,生成的持久层代码会自动继承tk.mybatis.mapper.common.Mapper,用数据库常用操作方法,需要在类名上添加@Repository注解,把该对象交给Spring维护。
c)使用代码生成模块根据持久层代码自动生成服务层、控制层代码。自动生成的代码情况如下:
控制层显式声明@RestController,会继承基础模块中的基础控制类,并且生成常用的增删查改接口,每个接口上都使用注解显式声明其路由地址、返回类型以及参数验证,这些接口是通过调用基础控制类的增删查改方法实现的;
服务层显式声明@Service会继承基础模块中的基础服务类,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。派生服务类(新类,一般称子类)单纯继承基础服务类(已有类,一般称父类),子类没有对业务逻辑功能进行扩展,或者没有对父类中已有方法进行重写,因为业务逻辑是未知的,这些未知的业务逻辑代码根本不可能使用程序自动生成代码,必须要程序员根据具体的业务逻辑手动进行代码编写。但即使不进行代码编写来进行功能重写或者扩展,因为派生服务类有继承父类,而这个父类就是基础服务类,它就能拥有基础服务类已有属性和方法。
d)根据JSR303标准在各个数据模型的字段上添加基本的数据验证。例如在用户模型的名字字段上添加@NotBlank(message="名字不能为空",groups=AddNotNull.class),在调用添加用户数据接口的时候,会验证名字这个字段是否为空。
e)修改服务层的查询条件,根据上述各种功能管理不同的字段以及逻辑,分别重写model2Example方法。例如用户的查询条件,需要用户名、账号模糊查找,部门精确查找,创建日期时间段查找,那么在重新model2Example方法时,需要使用tk.mybatis.mapper.entity.Example.Criteria类动态拼接条件。这些细节需要按不同功能管理对应的数据模型、需求分别处理。
f)根据上述各种功能管理不同的需求,按照控制层代码结构,分别修改对应功能管理的接口。例如用户管理,它需要一个修改密码的功能,而自动生成的用户控制器是没有的,所以需要添加相关接口;又例如日志管理,它是不需要删除功能的,但是自动生成的日志控制器是有del的,那么就需要把该接口删除。这些细节需要按不同情况分别处理。
综上所述,使用本发明开发Restfult服务的项目,最大的优势是快速,与通用模块实现步骤一致,只需要进行a-c这三步操作,3-5分钟即可完成一个项目的开发,如需要针对项目进行关注业务逻辑的细节化开发,那么就需要进行d-f这三步操作,这种开发方法可以让程序员只关注业务逻辑;另一方面,统一代码结构、统一插件使用、统一第三方类库,为团队协作开发以及项目后期维护创造有利条件;最后,通用模块的分离式设计,可以自由控制项目是否需要这部份的功能,或者自由扩展该功能。
本实施例还提供一种存储介质,存储介质可以是ROM、RAM、磁盘、光盘等储存介质,该存储介质存储有一个或多个程序,所述程序被处理器执行时,实现上述基于SSM框架的Restful服务开发过程。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (9)
1.一种基于SSM框架的Restful服务开发方法,其特征在于,包括下述步骤:
构建基础模块,定义通讯协议、通讯格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,实现控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系;
构建工具模块,封装数据及工具;
构建代码生成模块,定义目标代码文件的模板文件,根据模板文件生成代码文件,生成数据模型和持久层代码;
构建通用模块,所述通用模块根据基础模块、工具模块和代码生成模块实现功能管理,所述代码生成模块根据项目包名自动生成配置文件,根据数据库自动生成数据模型、持久层的代码,根据持久层代码自动生成服务层、控制层代码,在各个数据模型的字段上添加基本的数据验证,修改服务层的查询条件,根据各个功能管理不同的需求,按照控制层代码结构分别修改对应功能管理的接口;
所述根据持久层代码自动生成服务层、控制层代码,生成的代码具体为:
控制层显式声明继承基础模块中的基础控制类,并且生成增删查改接口,每个接口上都使用注解显式声明其路由地址、返回类型以及参数验证;
服务层显式声明继承基础模块中的基础服务类。
2.根据权利要求1所述的基于SSM框架的Restful服务开发方法,其特征在于,所述通讯协议采用http/https协议,统一使用POST请求方式,指定访问令牌放到请求头中;
所述定义通讯格式具体包括:定义响应格式,统一使用JSON格式返回,并且限制返回字段;
所述数据验证具体包括:定义验证分组注解,提供给BEAN字段以及访问接口的声明式验证处理使用,定义验证工具类,提供给代码验证方式使用;
所述异常处理具体包括:利用Spring中的控制器增强技术,统一对未处理的异常进行请求响应;
所述基础控制实现类具体包括:以泛型的方式维护其对应的服务层对象、持久层类型、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现增删查改;
所述基础服务接口与实现类具体包括:以泛型的方式维护其对应的持久层对象、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现业务调用持久层的操作数据库。
3.根据权利要求1所述的基于SSM框架的Restful服务开发方法,其特征在于,所述封装数据及工具,具体包括封装基础操作工具、Excel子工具、文件拆分与合并工具、FTP工具;
所述Excel子工具使用poi技术,对第三方类库进行二次封装,分别实现Excel文件的写入、读取、模板填充的操作;
所述文件拆分与合并工具使用线程同时读取源文件,并行操作目标文件;
所述FTP工具定义客户端操作接口、客户端回调接口,过程监听接口,并实现FTP操作类,编写客户端操作接口的实现类,根据不同业务调用FTP操作类。
4.根据权利要求1所述的基于SSM框架的Restful服务开发方法,其特征在于,所述定义目标代码文件的模板文件,遵循FreeMarker模板FTL指令规则、插值规则、表达式规则,并统一模板后缀名;
所述根据模板文件生成代码文件,根据FreeMarker模板引擎实现,具体包括:验证传入参数;创建配置对象,并放入参数;读取目标代码文件,并验证是否存在,如果不存在则创建;采用配置对象读取指定的模板文件,并输出写入目标文件;
所述生成数据模型和持久层代码具体采用Mybatis代码生成插件生成数据模型和持久层代码。
5.一种基于SSM框架的Restful服务开发装置,其特征在于,包括:基础模块、工具模块、代码生成模块和通用模块;
所述基础模块用于定义通讯协议、通讯格式、数据验证、异常处理、基础控制实现类、基础服务接口与实现类,实现控制层、服务层、持久层之间的调用逻辑,数据模型与功能模块之间的对应关系;
所述工具模块封装数据及工具;
所述代码生成模块包括:模板文件、代码生成器、Mybatis代码生成插件;
所述模板文件用于定义目标代码文件的模板,按照基础模块的定义编写模板文件,所述代码生成器用于根据模板文件生成代码文件,所述Mybatis代码生成插件用于生成数据模型和持久层代码;
所述通用模块根据基础模块、工具模块和代码生成模块实现功能管理,所述代码生成模块用于根据项目包名自动生成配置文件,根据数据库自动生成数据模型、持久层的代码,根据持久层代码自动生成服务层、控制层代码,在各个数据模型的字段上添加基本的数据验证,修改服务层的查询条件,根据各个功能管理不同的需求,按照控制层代码结构分别修改对应功能管理的接口;
所述根据持久层代码自动生成服务层、控制层代码,生成的代码具体为:
控制层显式声明继承基础模块中的基础控制类,并且生成增删查改接口,每个接口上都使用注解显式声明其路由地址、返回类型以及参数验证;
服务层显式声明继承基础模块中的基础服务类。
6.根据权利要求5所述的基于SSM框架的Restful服务开发装置,其特征在于,所述基础控制实现类具体包括:以泛型的方式维护其对应的服务层对象、持久层类型、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现增删查改;
所述基础服务接口与实现类具体包括:以泛型的方式维护其对应的持久层对象、数据模型,以备被子类继承时,控制具体的功能模块与数据的对应关系,并实现业务调用持久层的操作数据库。
7.根据权利要求5所述的基于SSM框架的Restful服务开发装置,其特征在于,所述工具模块包括基础操作工具、Excel子工具、文件拆分与合并工具、FTP工具;
所述Excel子工具用于使用poi技术,对第三方类库进行二次封装,分别实现Excel文件的写入、读取、模板填充的操作;
所述文件拆分与合并工具用于使用线程同时读取源文件,并行操作目标文件;
所述FTP工具用于定义客户端操作接口、客户端回调接口,过程监听接口,并实现FTP操作类,编写客户端操作接口的实现类,根据不同业务调用FTP操作类。
8.根据权利要求5所述的基于SSM框架的Restful服务开发装置,其特征在于,所述通用模块与基础模块的采用分离式设计。
9.一种存储介质,存储有程序,其特征在于,所述程序被处理器执行时实现如权利要求1-4任一项所述基于SSM框架的Restful服务开发方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011642336.XA CN112748908B (zh) | 2020-12-31 | 2020-12-31 | 基于SSM框架的Restful服务开发方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011642336.XA CN112748908B (zh) | 2020-12-31 | 2020-12-31 | 基于SSM框架的Restful服务开发方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112748908A CN112748908A (zh) | 2021-05-04 |
CN112748908B true CN112748908B (zh) | 2024-02-27 |
Family
ID=75649437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011642336.XA Active CN112748908B (zh) | 2020-12-31 | 2020-12-31 | 基于SSM框架的Restful服务开发方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112748908B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282277A (zh) * | 2021-05-17 | 2021-08-20 | 广州紫鲸互联网科技有限公司 | Java服务端开发框架 |
CN113608738B (zh) * | 2021-07-23 | 2023-12-12 | 成都航盛智行科技有限公司 | 基于someip仪表数据的汽车服务系统 |
CN113805877B (zh) * | 2021-09-26 | 2024-06-25 | 工银科技有限公司 | 基于idea插件的项目工程的构建方法及装置 |
CN113835707B (zh) * | 2021-09-30 | 2024-01-19 | 唯品会(广州)软件有限公司 | 一种造数方法、装置、设备及可读存储介质 |
CN114153912A (zh) * | 2021-11-12 | 2022-03-08 | 上海通贸国际供应链管理有限公司 | 一种基于可视化集成的分析方法 |
CN114385230A (zh) * | 2021-12-15 | 2022-04-22 | 上海金仕达软件科技有限公司 | 系统构建方法、装置、计算机设备、存储介质和程序产品 |
CN114844875B (zh) * | 2022-04-21 | 2024-02-06 | 深圳依时货拉拉科技有限公司 | 一种应用程序编程接口api管理方法、装置、设备及介质 |
CN114900511B (zh) * | 2022-04-25 | 2023-02-03 | 湖南大学 | 工业机器人数据同步采集加载中间件装置及方法 |
CN114936540B (zh) * | 2022-07-22 | 2022-10-25 | 深圳联友科技有限公司 | 一种pdf文档模型的数据处理方法及处理组件 |
CN115114052B (zh) * | 2022-08-30 | 2022-11-18 | 北京易诚互动网络技术股份有限公司 | 一种智能提供数据库微服务的方法和装置 |
CN116739854A (zh) * | 2023-06-29 | 2023-09-12 | 北方工业大学 | 导师和研究生双选及信息管理系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105739987A (zh) * | 2016-02-03 | 2016-07-06 | 成都四方伟业软件股份有限公司 | 面向SOA的快速构建JavaWeb应用的系统框架 |
CN108196836A (zh) * | 2018-01-31 | 2018-06-22 | 北京工业大学 | 基于ssm框架的企业内博客系统 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN111813394A (zh) * | 2020-05-22 | 2020-10-23 | 广州太平洋电脑信息咨询有限公司 | 一种基于SpringBoot的Zeus框架的开发方法及Zeus框架 |
CN112015420A (zh) * | 2020-09-16 | 2020-12-01 | 广东广宇科技发展有限公司 | 表单渲染方法、装置、计算机设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8631386B2 (en) * | 2004-08-25 | 2014-01-14 | Mohit Doshi | System and method for automating the development of web services |
US7895566B2 (en) * | 2005-03-10 | 2011-02-22 | Research In Motion Limited | System and method for building a deployable component based application |
-
2020
- 2020-12-31 CN CN202011642336.XA patent/CN112748908B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105739987A (zh) * | 2016-02-03 | 2016-07-06 | 成都四方伟业软件股份有限公司 | 面向SOA的快速构建JavaWeb应用的系统框架 |
CN108196836A (zh) * | 2018-01-31 | 2018-06-22 | 北京工业大学 | 基于ssm框架的企业内博客系统 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN111813394A (zh) * | 2020-05-22 | 2020-10-23 | 广州太平洋电脑信息咨询有限公司 | 一种基于SpringBoot的Zeus框架的开发方法及Zeus框架 |
CN112015420A (zh) * | 2020-09-16 | 2020-12-01 | 广东广宇科技发展有限公司 | 表单渲染方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
"基于SSM+Spring Security 的多角色登录功能后台实现";孙云杰 等;《电子技术与软件工程》;第2-5节 * |
"大数据时代下基于SSM框架的语音标注系统的设计与实现";密海英;《信息与电脑》;第1-3节 * |
Also Published As
Publication number | Publication date |
---|---|
CN112748908A (zh) | 2021-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112748908B (zh) | 基于SSM框架的Restful服务开发方法与装置 | |
US9235380B2 (en) | Software modeling framework | |
CN110187902B (zh) | 基于spring boot的项目改造方法、装置、设备及存储介质 | |
US20100281463A1 (en) | XML based scripting framework, and methods of providing automated interactions with remote systems | |
Alexiou et al. | Advanced capabilities for gas turbine engine performance simulations | |
WO2021052338A1 (zh) | 智能合约客户端程序的生成方法、系统、设备和介质 | |
CN111506314A (zh) | 项目开发的方法、装置、服务器及介质 | |
Harzenetter et al. | Pattern-based deployment models revisited: automated pattern-driven deployment configuration | |
US20040088304A1 (en) | Method, system and program product for automatically creating managed resources | |
CN112860247A (zh) | 一种模型组件的自定义生成方法、装置、设备及介质 | |
US7617481B2 (en) | Prescriptive architecture for application development | |
US11989558B2 (en) | Automatic generation of a cloud integration adapter from a standard, programming language-agnostic interface specification | |
Laitkorpi et al. | A uml-based approach for abstracting application interfaces to rest-like services | |
CN113342399B (zh) | 应用项目的结构配置方法、装置及可读存储介质 | |
CN117971350A (zh) | 小程序运行方法、装置和计算机可读存储介质 | |
Xu et al. | Web-service-oriented customer relationship management system evolution | |
Siegel | A preview of CORBA 3 | |
Srinivasmurthy et al. | Web2exchange: A model-based service transformation and integration environment | |
CN113626001A (zh) | 一种基于脚本的api动态编排方法及装置 | |
CN117311799B (zh) | 一种软件项目页面的配置方法 | |
CN111459470B (zh) | 一种Hub系统对接第三方软件生成代码及文档的方法 | |
Juhnke et al. | LCDL: an extensible framework for wrapping legacy code | |
CN112732240B (zh) | 一种Java组件的生成方法及装置 | |
CN113901270B (zh) | 一种原生多模型数据库操作方法及装置 | |
CN114679366B (zh) | 多云环境下面向租户开放运维工具的方法、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |