背景

作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分。因为其重要性围绕着数据操作也出现了众多框架。成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和裁剪,适应公司业务及技术需求。本文将结合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/2接口实现iOS的高性能消息推送(服务端篇)

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

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

    一. 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. Linux软件安装管理

    1.软件包管理简介 1.软件包分类 源码包 脚本安装包 二进制包(RPM包.系统默认包) 2.源码包 源码包的优点是: 开源,如果有足够的能力,可以修改源代码 可以自由选择所需要的功能 软件设计编译安 ...

  2. 前端笔记----jquery入门知识点总结

    一.jquery的加载方法 $(document).ready(function(){js代码}); $(function(){js代码});(一般使用这个); 注意点1:使用jquery必须先导入函 ...

  3. oracle11G r2 静默安装单实例(待优化版)

    测试环境:centos 6.9 X64 mini 版 oracle版本:11G r2 Oracle软件包:db_112040_Linux-x86-64_1of7.zip;db_112040_Linux ...

  4. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  5. Latex 去掉行号

    本文主要讲如何去掉Latex的行号 删除\modulolinenumbers删除所有\linenumbers 删除\usepackage{lineno,hyperref} modulolinenumb ...

  6. Node.js之异步流控制

    前言 在没有深度使用函数回调的经验的时候,去看这些内容还是有一点吃力的.由于Node.js独特的异步特性,才出现了"回调地狱"的问题,这篇文章中,我比较详细的记录了如何解决异步流问 ...

  7. ASP.NET MVC @Html.Label的问题

    在使用@Html.Lable()来显示Model的某一个字符串属性时,如果该字符串中包含".",那么就会在最终呈现时被截掉开头至"."位置的字符.什么原因尚不清 ...

  8. 超文本传送协议HTTP

    1. HTTP的操作过程: HTTP是面向事务的应用层协议.HTTP协议本身是无连接的,为了保证数据的可靠传输,HTTP使用了面向连接的TCP作为运输层协议.所以,在发送HTTP报文之前都需要先建立T ...

  9. 关于对vector3及其衍生变量的理解

    关于对vector3,vector2类及其衍生变量的理解 vector3简单来讲即表示向量和点的系统类,这个结构用于处理向量和点,也包含许多做向量运算的函数. 而vector2即少一维向量的类,用于处 ...

  10. HDU 5182

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; / ...