基于MyBatis的数据服务接口

时间:2022-08-24 18:42:57

背景

作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分。因为其重要性围绕着数据操作也出现了众多框架。成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和裁剪,适应公司业务及技术需求。本文将结合MyBatis框架进行数据服务系统设计。

结合现有的系统开发,实现一次数据操作需要有以下组成部分:

  1. 定义Controller
  2. 定义Menager
  3. 定义Service
  4. 定义Entity
  5. 定义Mapper.xml

    对应一个数据操作接口,就需要定义4个方法以及1个SQLMapper。这个过程中存在较多重复的工作,给开发人员带来了工作量的,不利于系统的稳定性和。

    目标

    本设计的主要目标就是降低数据操作开发的复杂度,提高服务稳定性。因添加、修改、删除等一般结合较为复杂的逻辑,所以以下主要针对查询进行设计。最终实现的目标为:

  6. 数据接口统一管理。
  7. 对入参、出参进行统一规范。
  8. 通过配置(不进行代码开发)实现数据操作。

    最终通过约定方式,实现开发人员只需要配置Mapper.xml就可以实现数据服务接口。

    数据流

    系统主流程为,WebApi调用后台系统,后台系统通过约定获取MyBatis的Mapper配置,生成动态SQL,实现数据操作接口。数据流如下:

  9. 访问WebApi接口
  10. Controller通过Token获取接口调用身份信息。
  11. Controller进行接口权限验证。
  12. Controller通过Body获取数据操作参数信息,映射到Map中,作为参数传入MyBatis。
  13. Controller通过接口参数获取Mapper配置节点。
  14. 进行数据库操作。
  15. 将返回的结果根据配置进行进行映射(JS区分大小写,因此返回数据需要明确定义其Name的大小写)。
  16. 序列化返回的结果。

    其中主要工作由平台完成,开发人员需要完成的工作只有以下两项
  17. 步骤5中对应的Mapper动态SQL节点的配置。
  18. 步骤7中返回结果的映射配置(如数据库查询ColumnName为“platformid”,映射到返回结果时为“platfromId”)。

    出入参格式

    Url

    Url采用同一路由,根据不同的参数(最后一部分路径),匹配不同的Mapper。

    Url组成格式

    ''api/{系统}/{模块}/{version}/{功能}/{参数}

    对应数据服务接口的Url为

    ''api/dbsys/dynamic/20171117/mybatis/{mytest}

    相同的URL规范便于以后实现,Url与业务实现方法的动态设置匹配,实现服务发现和治理。

    入参定义

    Header:

  19. Authorization:{Token}
  20. Content-Type:application/x-www-form-urlencoded
  21. ewayRequestId:GUID
  22. ewayConfig: {暂无,用于扩展}
  23. ewayPlatform:{平台信息,如PlatformId,Version等}

    Body
  24. param={key1:{value:value, type:type}, key2:{value:value, type:type}} {参数信息}
  25. config={配置信息,主要用于增删改等业务流程配置。查询业务暂无。}

    出参定义

    Body数据格式

    '' {

    '' requestId:’请求GUID,全局唯一,与入参ewayRequestId相同’,

    '' status:200, //与http的status对应

    '' code:0, //业务结果代码

    '' msg:’提示信息,用于前台展示’,

    '' error:’异常信息,用于异常输出’,

    '' data:{返回数据信息}

    '' }

后记

本文主要阐述了查询业务,对于增删改因一般存在业务流程,因此需要结合业务进行数据。

为了更好的满足产品需求,需要在平台开发方面不断完善,降低开发复杂度的同时,提供系统的扩展能力。

基于MyBatis的数据服务接口的更多相关文章

  1. 在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现

    <在ASP.NET Core中使用Apworks快速开发数据服务>一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介 ...

  2. 基于APNs最新HTTP&sol;2接口实现iOS的高性能消息推送&lpar;服务端篇&rpar;

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

  3. 5&period;7 Liquibase:与具体数据库独立的追踪、管理和应用数据库Scheme变化的工具。-mybatis-generator将数据库表反向生成对应的实体类及基于mybatis的mapper接口和xml映射文件&lpar;类似代码生成器&rpar;

    一. liquibase 使用说明 功能概述:通过xml文件规范化维护数据库表结构及初始化数据. 1.配置不同环境下的数据库信息 (1)创建不同环境的数据库. (2)在resource/liquiba ...

  4. 基于AppCan MAS系统,如何轻松实现移动应用数据服务?

    完成一个移动应用开发,前端提供页面展示,当它要与一些业务系统进行交互,又该如何实现呢?2016AppCan移动开发者大会上,AppCan前端开发经理杨庆,分享了AppCan轻松实现移动应用数据服务的方 ...

  5. 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  6. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

    基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 一.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...

  7. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  8. 基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  9. MaxCompute,基于Serverless的高可用大数据服务

    摘要:2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,阿里巴巴高级技术专家吴永明为大家分享了 ...

随机推荐

  1. 关于OpenStack的学习路线及相关资源汇总

    首先我们想学习openstack,那么openstack是什么?能干什么?涉及的初衷是什么?由什么来组成?刚接触openstack,说openstack不是一个软件,而是由多个组件进行组合,这是一个更 ...

  2. CentOS终端界面登入Linux

    上述图片中,前两行为CentOS的版本信息,其内容来自于/etc/issue这个档案中. 后三行:www login:其中www表示主机名(设主机名为www.vbird.tsal),主机名显示通常只取 ...

  3. PHP中变量,常量,超级全局变量小结

    //一般来说,变量在函数无法在函数体中无法访问,但是常量可以.//超级全局变量确实可以的,地址栏上的参数/*$GLOBALS   //变量注册的信息$_GET      //地址栏参数$_POST   ...

  4. cmake简易教程

    用cmake替代makefile,构建项目还是蛮简单实用的. 工程目录下src放源代码,build保存所有的编译过程和结果. 首先看看src目录下的源代码结构: 最顶层CMakeLists.txt内容 ...

  5. div&plus;css 圆角加阴影

    .test{ display: inline-block; padding: 5px 10px 6px; text-decoration: none; border-radius: 5px; -moz ...

  6. html5lib-python doc

    http://html5lib.readthedocs.org/en/latest/ By default, the document will be an xml.etree element ins ...

  7. TextUtils判断

    System.out.println(TextUtils.isEmpty(null)); System.out.println(TextUtils.isEmpty(""));

  8. 使用NPOI读取Excel数据到DataTable

    如今XML文件的存储格式大行其道,可是也不是适用于全部情况,非常多单位的数据交换还是使用Excel的形式.这就使得我们须要读取Excel内的数据.载入到程序中进行处理.可是如何有效率的读取,如何使程序 ...

  9. 字符串MD5加密运算

    public static string GetMd5String(string str)       {           MD5 md5 = MD5.Create();           by ...

  10. elasticsearch节点&lpar;角色&rpar;类型解释node&period;master和node&period;data

    在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题. 默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储 ...

相关文章