背景

作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分。因为其重要性围绕着数据操作也出现了众多框架。成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和裁剪,适应公司业务及技术需求。本文将结合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. 客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出!

    客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出! 创建时间: 2017/10/14 18:44 作者: CNSIMO 标签: ORACLE 忙了一下午,只有两个字形容:麻烦!   ...

  2. 转载:C#特性-表达式树

    原文地址:http://www.cnblogs.com/tianfan/ 表达式树基础 刚接触LINQ的人往往觉得表达式树很不容易理解.通过这篇文章我希望大家看到它其实并不像想象中那么难.您只要有普通 ...

  3. java基础---java语言概述

    一.计算机编程的两种范型 1.面向过程的模型---具有线性执行特点,认为是代码作用于数据. 2.面向对象的模型---围绕它的数据(即对象)和为这个数据定义的接口来组织程序:实际上是用数据控制代码的访问 ...

  4. ASP.NET没有魔法——ASP.NET MVC IoC

    之前的文章介绍了MVC如何通过ControllerFactory及ControllerActivator创建Controller,而Controller又是如何通过ControllerBase这个模板 ...

  5. 浅谈javascript继承体系

    最近做web项目,接触了jquery等框架,虽然使用方便,但是还是想学习下Javascript,今天分享下最近对js原型继承的理解,不足之处欢迎指正. 一.构造器的原型属性与原型对象 刚接触js时通常 ...

  6. APP崩溃提示:This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

    崩溃输出日志 2017-08-29 14:53:47.332368+0800 HuiDaiKe[2373:1135604] This application is modifying the auto ...

  7. Java boolean类型

    有关java boolean类型的定义: The boolean data type has only two possible values: true and false. Use this da ...

  8. 长话短说 之 js的原型和闭包

    原型链:undefined, number, string, boolean 属于简单的值类型,函数.数组.对象.null.new obj()都是引用类型.检测值类型用typeof x 即可,检测引用 ...

  9. Java反射机制(Reflect)解析

    一.导读 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计 ...

  10. ACM课程总结

    当我还是一个被P哥哥忽悠来的无知少年时,以为编程只有C语言那么点东西,半个学期学完C语言的我以为天下无敌了,谁知自从有了杭电练习题之后,才发现自己简直就是渣渣--咳咳进入正题: STL篇: 成长为一名 ...