彻底告别 Controller、Service、Dao,这款开发神器绝了!

关系型数据库NoSQL数据库MySQL

作为Java后端开发,平时开发API接口的时候经常需要定义Controller、Service、Dao、Mapper、XML、VO等Java对象。我们甚至使用代码生成器来通过数据库生成这些代码!有没有什么办法可以让我们不写这些代码,直接操作数据库生成API接口呢?今天给大家推荐一款工具magic-api,来帮我们实现这个小目标!

magic-api简介

magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象。

最近建了一些工作内推群,各大城市都有,欢迎各位HR和找工作的小伙伴进群交流,群里目前已经收集了不少的工作内推岗位。扫码加苏三的微信:li_su223,备注:所在城市,即可进群。

picture.image

使用

下面我们来波实战,熟悉下使用magic-api来开发API接口。

在SpringBoot中使用

magic-api原生支持SpringBoot,可与SpringBoot无缝整合。

  • 首先在 pom.xml 中添加 magic-api 相关依赖;
  
<!--接口快速开发框架 magic-api-->  
<dependency>  
    <groupId>org.ssssssss</groupId>  
    <artifactId>magic-api-spring-boot-starter</artifactId>  
    <version>1.0.2</version>  
</dependency>  

  • 在配置文件 application.yml 中添加数据源及 magic-api 相关配置;
  
spring:  
  datasource:  
    url:jdbc:mysql://localhost:3306/magic\_api?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai  
    username:root  
    password:root  
  
magic-api:  
# 配置api管理页面入口  
web:/magic/web  
# 配置存储方式  
resource:  
    # 配置接口资源存储位置,可选file、database、redis  
    type:database  
    # 存储表名  
    tableName:magic\_api\_file  
    # 使用database、redis存储时的key前缀  
    prefix:/magic-api  
    # 是否是只读模式  
    readonly:false  
# 启用驼峰命名转换  
sql-column-case:camel  
# 分页配置  
page-config:  
    # 页大小的请求参数名称  
    size:size  
    # 页码的请求参数名称  
    page:page  
    # 未传页码时的默认页码  
    default-page:1  
    # 未传页大小时的默认页大小  
    default-size:10  

  • 在MySQL中创建数据库 magic\_api ,由于我们配置了使用数据库存储接口资源,所以需要先创建 magic\_api\_file 表;
  
CREATE TABLE `magic\_api\_file`  
(  
  `id`           bigint(255) NOT NULL AUTO\_INCREMENT,  
  `file\_path`    varchar(255) DEFAULT NULL,  
  `file\_content` text,  
  PRIMARY KEY (`id`)  
)  

  • 再创建 pms\_brand 表,用于测试;
  
CREATE TABLE`pms\_brand` (  
`id`bigint(20) NOTNULL AUTO\_INCREMENT,  
`big\_pic`varchar(255) DEFAULTNULL,  
`brand\_story`varchar(255) DEFAULTNULL,  
`factory\_status`bit(1) DEFAULTNULL,  
`first\_letter`varchar(255) DEFAULTNULL,  
`logo`varchar(255) DEFAULTNULL,  
`name`varchar(255) DEFAULTNULL,  
`product\_comment\_count`int(11) DEFAULTNULL,  
`product\_count`int(11) DEFAULTNULL,  
`show\_status`bit(1) DEFAULTNULL,  
`sort`int(11) DEFAULTNULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO\_INCREMENT=9DEFAULTCHARSET=utf8mb4;  

picture.image

增删改查

接下来我们将以商品品牌管理为例,体验下使用magic-api开发接口的快感!使用magic-api开发API接口,仅需在界面中使用magic-script脚本即可。

  • 首先我们来写个新增接口,先创建一个分组,然后在分组中创建一个 新增 接口,在编辑框中输入如下脚本;
  
// 使用body对象可以直接获取请求body中的参数  
return db.table('pms\_brand').insert(body);  

  • 在底部的 接口信息 中进行如下配置, POST 请求,请求路径为 /create ,请求参数放在 请求body 中;

picture.image

  • 再来个根据ID查询的接口,在编辑框中输入如下脚本;
  
// 路径变量从path对象中获取  
return db.table('pms\_brand')  
    .where()  
    .eq('id',path.id)  
    .selectOne();  

  • 在底部的 接口信息 中进行如下配置, GET 请求,请求路径为 /detail/{id} ,请求参数放在 路径变量 中;

picture.image

  • 再来个修改的接口,在编辑框中输入如下脚本;
  
return db.table('pms\_brand').primary('id',body.id).update(body);  

  • 在底部的 接口信息 中进行如下配置, POST 请求,请求路径为 /update ,请求参数放在 请求body 中;

picture.image

  • 再来个分页查询查询的接口,在编辑框中输入如下脚本;
  
return db.table('pms\_brand').page();  

  • 在底部的 接口信息 中进行如下配置, GET 请求,请求路径为 /page ,请求参数放在 请求参数 中(由于已经在 aapplication.yml 中配置好了分页参数,可直接使用);

picture.image

  • 再来个根据ID删除的接口,在编辑框中输入如下脚本,删除只能使用update,这设计有点...
  
return db.update('delete from pms\_brand where id=#{id}');   

  • 在底部的 接口信息 中进行如下配置, POST 请求,请求路径为 /delete/{id} ,请求参数放在 路径变量 中;

picture.image

参数验证

我们可以通过断言模块assert来进行参数验证。

  • 比如新增品牌的时候名称和首字母不能为空,在编辑框中输入如下脚本;
  
import assert;  //导入断言模块  
//验证不通过时,会终止运行  
assert.notEmpty(body.name,400,'名称不能为空!');  
assert.notEmpty(body.firstLetter,400,'首字母不能为空!');  
return db.table('pms\_brand').insert(body);  

  • 在底部的 接口信息 中进行如下配置, POST 请求,请求路径为 /test ,请求参数放在 请求body 中;

picture.image

  • 当我们不添加 name 字段时,调用接口会返回我们自己定义的错误信息和状态码。

picture.image

结果转换

我们可以使用map方法对查询数据进行转换,返回我们想要的数据。

  • 比如我们想将 showStatus 转换为中文说明,并只返回三个需要的字段,在编辑框中输入如下脚本;
  
var list = db.table('pms\_brand').select();  
return list.map((item)=>{  
    name : item.name,  
    firstLetter : item.firstLetter,  
    showStatus : item.showStatus? '不显示' : '显示'  
});  

  • 访问该接口,在执行结果中可以发现,返回结果已经转换。

picture.image

使用事务

在我们使用Java开发接口的时候,少不了用到事务,当然magic-api也是支持事务的。使用db.transaction()方法即可,支持自动事务和手动事务。

  • 还是以修改品牌为例,先查询是否存在,如果存在则更新;
  
import assert;   
var val = db.transaction(()=>{  
    var exist = db.table('pms\_brand').where().eq('id',body.id).selectOne();  
    assert.notNull(exist,404,'找不到该品牌!');  
    db.table('pms\_brand').primary('id',body.id).update(body);  
    return v2;  
});  
return val;  

  • 在底部的 接口信息 中进行如下配置, POST 请求,请求路径为 /test ,请求参数放在 请求body 中;

picture.image

集成Swagger

写了那么多接口,都是在magic-api的界面中进行调试的。如果你习惯使用Swagger,magic-api也可以和Swagger进行无缝整合。

  • 首先在 pom.xml 中添加Swagger相关依赖;
  
<dependencies>  
    <!--Swagger-UI API文档生产工具-->  
    <dependency>  
        <groupId>io.springfox</groupId>  
        <artifactId>springfox-swagger2</artifactId>  
        <version>2.9.2</version>  
    </dependency>  
    <dependency>  
        <groupId>io.springfox</groupId>  
        <artifactId>springfox-swagger-ui</artifactId>  
        <version>2.9.2</version>  
    </dependency>  
</dependencies>  

  • 在配置文件 application.yml 中添加Swagger相关配置;
  
magic-api:  
  # 集成Swagger配置  
swagger-config:  
    # 文档名称  
    name:MagicAPI测试接口  
    # 文档标题  
    title:MagicAPISwaggerDocs  
    # 文档描述  
    description:MagicAPI测试接口信息  
    # 文档版本号  
    version:1.0  
    # 文档资源位置  
    location:/v2/api-docs/magic-api/swagger2.json  

picture.image

总结

magic-api是个很有意思的框架,可以通过在UI界面中使用简单的脚本,进行API接口的开发。不过作为一款小众框架,magic-api还有很长一段路要走!

项目地址

https://gitee.com/ssssssss-team/magic-api

最后欢迎加入苏三的星球,你将获得:商城微服务实战、AI开发项目课程、苏三AI项目、秒杀系统实战、商城系统实战、秒杀系统实战、代码生成工具、系统设计、性能优化、技术选型、底层原理、Spring源码解读、工作经验分享、痛点问题、面试八股文等多个优质专栏。

还有1V1答疑、修改简历、职业规划、送书活动、技术交流。

扫描下方二维码,即可加入星球:

picture.image 目前星球已经更新了5200+篇优质内容,还在持续爆肝中.....

星球已经被官方推荐了3次,收到了小伙伴们的一致好评。戳我加入学习,已有1700+小伙伴加入学习。

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论