Magic-api介绍及使用

Magic-api介绍及使用

by @Claudia

![magic-api-logo.png](https://www.icode9.com/i/ll/?i=img_convert/cf3987bd5a7fecdf6603f2aaf80f1e64.png#align=left&display=inline&height=149&margin=[object Object]&name=magic-api-logo.png&originHeight=149&originWidth=408&size=56152&status=done&style=none&width=408)

简介 | 主要特性 | 基本使用 | 数据库查询 | 调用Java封装的类与方法 | 调用Java自定义模块 | 自定义函数 自定义脚本函数 | 自定义重写接口 | 官方资料 | 在线演示 | 总结 | 文章测试demo github地址

简介

magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成(如下图),自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML等Java对象即可完成常见的HTTP API接口开发。
![image.png](https://www.icode9.com/i/ll/?i=img_convert/887259e556fd8c017856b72a5dac2332.png#align=left&display=inline&height=296&margin=[object Object]&name=image.png&originHeight=1035&originWidth=1905&size=102967&status=done&style=none&width=545)


主要特性
  • 基于 magic-script 脚本引擎,动态编译,无需重启,实时发布
  • 支持多数据源配置,支持运行时动态添加数据源
  • 支持导入Spring中的Bean、Java中的类
  • 支持自定义工具类、自定义模块包、自定义类型扩展、自定义函数等


其他特性

  • 支持MySQL、MariaDB、Oracle、DB2、PostgreSQL、SQLServer 等支持jdbc规范的数据库
  • 支持非关系型数据库Redis、Mongodb
  • 支持分页查询以及自定义分页查询
  • 支持SQL缓存,以及自定义SQL缓存
  • 支持SQL拦截、自定义分页方言、自定义列名转换
  • 支持自定义JSON结果、自定义分页结果
  • 支持对接口权限配置、拦截器等功能
  • 支持Swagger接口文档生成
  • 支持Linq式查询,关联、转换更简单
  • 支持数据库事务、SQL支持拼接,占位符,判断等语法
  • 支持文件上传、下载、输出图片
  • 支持脚本历史版本对比与恢复
  • 支持脚本代码自动提示、错误提示、参数提示、语法错误提示
  • 支持在线调试脚本引擎

基本使用
  • 首先导入官网提供的 **magic-api.sql **文件,主要用于存储在线web页面编写的接口与脚本数据。
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/8c3ab47ff9fe0515858d290a3c72c487.png#align=left&display=inline&height=268&margin=[object Object]&name=image.png&originHeight=724&originWidth=1532&size=146852&status=done&style=none&width=567)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for magic_api_info
-- ----------------------------
DROP TABLE IF EXISTS `magic_api_info`;
CREATE TABLE `magic_api_info`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `api_method` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方法',
  `api_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求路径',
  `api_script` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口脚本',
  `api_parameter` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口参数',
  `api_option` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口选项',
  `api_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接口名称',
  `api_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组ID',
  `api_request_body` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求体',
  `api_request_header` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求Header',
  `api_response_body` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '输出结果',
  `api_response_header` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '输出Header',
  `api_description` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接口描述',
  `api_create_time` bigint NULL DEFAULT NULL COMMENT '创建时间',
  `api_update_time` bigint NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'MagicAPI接口信息' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for magic_api_info_his
-- ----------------------------
DROP TABLE IF EXISTS `magic_api_info_his`;
CREATE TABLE `magic_api_info_his`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'api_id',
  `api_method` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方法',
  `api_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求路径',
  `api_script` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口脚本',
  `api_parameter` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口参数',
  `api_option` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '接口选项',
  `api_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接口名称',
  `api_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组ID',
  `api_request_body` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求体',
  `api_request_header` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求Header',
  `api_response_body` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '输出结果',
  `api_response_header` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '输出Header',
  `api_description` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接口描述',
  `api_create_time` bigint NULL DEFAULT NULL COMMENT '创建时间',
  `api_update_time` bigint NULL DEFAULT NULL COMMENT '修改时间'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'MagicAPI接口历史记录' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for magic_function
-- ----------------------------
DROP TABLE IF EXISTS `magic_function`;
CREATE TABLE `magic_function`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
  `function_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数名称',
  `function_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数路径',
  `function_parameter` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数列表',
  `function_return_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回值类型',
  `function_script` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '脚本',
  `function_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属分组',
  `function_description` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数描述',
  `function_create_time` bigint NULL DEFAULT NULL COMMENT '创建时间',
  `function_update_time` bigint NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'MagicAPI 函数表' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for magic_function_his
-- ----------------------------
DROP TABLE IF EXISTS `magic_function_his`;
CREATE TABLE `magic_function_his`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'function_id',
  `function_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数名称',
  `function_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数路径',
  `function_parameter` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数列表',
  `function_return_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回值类型',
  `function_script` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '脚本',
  `function_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属分组',
  `function_description` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '函数描述',
  `function_create_time` bigint NULL DEFAULT NULL COMMENT '创建时间',
  `function_update_time` bigint NULL DEFAULT NULL COMMENT '修改时间'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'MagicAPI 函数历史记录' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for magic_group
-- ----------------------------
DROP TABLE IF EXISTS `magic_group`;
CREATE TABLE `magic_group`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `group_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组名',
  `group_type` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组类型,1:接口分组,2:函数分组',
  `group_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组路径',
  `parent_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父级ID',
  `deleted` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否被删除,1:是,0:否',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'MagicAPI分组信息表' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;
  • 创建 Spring Boot 项目引入 Maven 依赖
<!-- 推荐用最新版 -->
<dependency>
	<groupId>org.ssssssss</groupId>
	<artifactId>magic-api-spring-boot-starter</artifactId>
  <version>0.6.1</version>
</dependency>
  • 修改 application.properties
server.port=9999
#配置web页面入口
magic-api.web=/magic/web
#以下配置需跟实际情况修改
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  • 如上代码是默认数据库magic-api的配置,实际开发中需要实现多数据源配置,因此application.properties修改如下:
server.port=9999
#配置web页面入口
magic-api.web=/magic/web
# database
db.conn.str=useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
# 默认主数据源
spring.datasource.magic.jdbc-url=jdbc:mysql://localhost:3306/magic-api?${db.conn.str}
spring.datasource.magic.username=root
spring.datasource.magic.password=
spring.datasource.magic.driver-class-name=com.mysql.cj.jdbc.Driver
# pm数据源
spring.datasource.pm.jdbc-url=jdbc:mysql://localhost:3306/pm?${db.conn.str}
spring.datasource.pm.username=root
spring.datasource.pm.password=
spring.datasource.pm.driver-class-name=com.mysql.cj.jdbc.Driver
  • 建立spring boot 多数据配置文件 DataSourceConfig.java![image.png](https://www.icode9.com/i/ll/?i=img_convert/c77088f63f7aafc36592bc73fa23ccdb.png#align=left&display=inline&height=372&margin=[object Object]&name=image.png&originHeight=942&originWidth=1589&size=210418&status=done&style=none&width=627)
@Configuration
public class DataSourceConfig {

  @Primary
  @Bean(name = "magic")
  @Qualifier("magic")
  @ConfigurationProperties(prefix = "spring.datasource.magic")
  public DataSource magicDataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "pm")
  @Qualifier("pm")
  @ConfigurationProperties(prefix = "spring.datasource.pm")
  public DataSource pmDataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean
  public MagicDynamicDataSource magicDynamicDataSource() {
    MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
    dynamicDataSource.setDefault(magicDataSource());
    dynamicDataSource.add("pm", pmDataSource());
    return dynamicDataSource;
  }
}
  • 脚本中使用:
//从pm库中查询
db.pm.select('select * from xxx');
//使用默认magic-api数据源
db.select('select * from xxx');  
  • 启动项目![image.png](https://www.icode9.com/i/ll/?i=img_convert/df62edafcc5ae5498e483e4e719e8014.png#align=left&display=inline&height=503&margin=[object Object]&name=image.png&originHeight=1005&originWidth=1922&size=254105&status=done&style=none&width=961)

  • 浏览器访问 http://localhost:9999/magic/web 进行在线操作,页面左侧有“接口列表”与“函数列表”:“接口列表”主要负责业务具体逻辑操作;“函数列表”主要封装一些常用的操作,就像数据库中的函数一样,是一个作用,代码里直接使用“函数名(参数1,参数2,…) ”调用即可。![image.png](https://www.icode9.com/i/ll/?i=img_convert/49bac0a05affdac8f191896a28984c2c.png#align=left&display=inline&height=502&margin=[object Object]&name=image.png&originHeight=1004&originWidth=1920&size=103694&status=done&style=none&width=960)

  • 以上为Magic-api入门操作。


功能列表:详细功能列表可见官方文档地址:https://ssssssss.org/

数据库查询
  • 当执行SQL需要动态参数时,可以使用?{condition,expression} #{expressio}, ${expression}, 表示,其中#{}, ${} 与Mybatis作用一致,?{condition,expression} 作用是先判断,如果条件成立则拼接后部分SQL内容,与mybatis中的 if 标签基本一致。

  • 例如,实现从数据库中查询 用户id u_id 为 1 的材料代码列表,先创建接口分组,其中每创建一个分组必须设置“分组前缀”,即访问的路径前缀:![image.png](https://www.icode9.com/i/ll/?i=img_convert/6d716af22e1666539cac142d5899d4c1.png#align=left&display=inline&height=391&margin=[object Object]&name=image.png&originHeight=782&originWidth=1338&size=70148&status=done&style=none&width=669)

  • 然后编写具体接口代码,在“接口信息”一栏设置接口名称,请求路径,请求参数等。

var sql = "select distinct stuff_code from pm_stuff ?{id, where u_id = #{u_id}}";
return db.pm.select(sql);
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/859962c3db30902865ba41368b4fdef1.png#align=left&display=inline&height=513&margin=[object Object]&name=image.png&originHeight=1026&originWidth=1908&size=133017&status=done&style=none&width=954)
  • 以上为开发一个简单接口的基本流程,magic-api具有热更新的特点,无需重启即可测试接口,postman测试接口结果:
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/55d5c63781a847b66df20552555ae307.png#align=left&display=inline&height=509&margin=[object Object]&name=image.png&originHeight=722&originWidth=640&size=35987&status=done&style=none&width=451)

调用Java封装的类与方法
  • 这是Magic-api最显著的一个特点,并且与magic-scipt语法结合可省去框架层级调用的繁琐。

  • 例如,实现根据用户Token与零件代码获取唯一零件信息,请求参数为token与code:首先在Java的IDE端封装好从用户token提取u_id的工具类,然后在脚本内调用方法,编辑代码获取数据库信息。![image.png](https://www.icode9.com/i/ll/?i=img_convert/c8ef8acf7736bd5b5412161744f1e88c.png#align=left&display=inline&height=489&margin=[object Object]&name=image.png&originHeight=978&originWidth=1640&size=217572&status=done&style=none&width=820)![image.png](https://www.icode9.com/i/ll/?i=img_convert/25a7b516fbd2265319d16402d5c77f60.png#align=left&display=inline&height=385&margin=[object Object]&name=image.png&originHeight=769&originWidth=1297&size=98164&status=done&style=none&width=648.5)

  • 使用Postman测试接口:![image.png](https://www.icode9.com/i/ll/?i=img_convert/3bb69f06289729cc95e7b7b9ec8cfadd.png#align=left&display=inline&height=415&margin=[object Object]&name=image.png&originHeight=830&originWidth=1230&size=99233&status=done&style=none&width=615)

调用Java自定义模块
  • 定义用@Component修饰的Java类,并继承MagicModule接口,重写 getModuleName() 方法用于在脚本内直接调用。
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/73a1360a5bbe3d509ae9b45a99ede690.png#align=left&display=inline&height=510&margin=[object Object]&name=image.png&originHeight=510&originWidth=932&size=79238&status=done&style=none&width=932)
  • 项目重新启动后在脚本内调用及结果:
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/0c1f94afbb791e34307b06cdbbdf2d8d.png#align=left&display=inline&height=883&margin=[object Object]&name=image.png&originHeight=883&originWidth=959&size=165180&status=done&style=none&width=959)
自定义函数
  • magic-api自定义函数是指 定义用@Component修饰的Java类,并设置方法,用@Function修饰。在线脚本编辑时直接调用方法名即可,不需要引入。

  • 自定义函数实例:首先定义CustomFunc类,添加@Component注解实例化到 Spring 容器中,然后定义方法添加@Function注解,@Comment注解

  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/22b12ed746a8a602996dca9386b50003.png#align=left&display=inline&height=700&margin=[object Object]&name=image.png&originHeight=700&originWidth=921&size=115591&status=done&style=none&width=921)

package wen.magic.demo.func;

import java.util.Date;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.config.MagicFunction;
import org.ssssssss.script.annotation.Comment;
import org.ssssssss.script.annotation.Function;
import org.ssssssss.script.functions.DateExtension;

@Component
public class CustomFunc implements MagicFunction {

  @Function
  @Comment("自定义函数:无参有返回值")
  public static Date customNow() {
    return new Date();
  }

  @Function
  @Comment("自定义函数:有参有返回值")
  public static String dateFormat(@Comment("目标日期") Date target) {
    return target == null ? null : DateExtension.format(target, "yyyy-MM-dd HH:mm:ss");
  }

  @Function
  @Comment("自定义函数:多个参数有返回值")
  public static Object ifNull(
      @Comment("目标值") Object target,
      @Comment("为空的值") Object trueValue,
      @Comment("不为空的值") Object falseValue) {
    return target == null ? trueValue : falseValue;
  }

}
  • 启动项目后在脚本中调用函数名即可
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/4a73019032562e8c7ed760dd797fc514.png#align=left&display=inline&height=377&margin=[object Object]&name=image.png&originHeight=377&originWidth=1138&size=46937&status=done&style=none&width=1138)
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/38719c01b844a2ee9203d571652d50b0.png#align=left&display=inline&height=304&margin=[object Object]&name=image.png&originHeight=304&originWidth=813&size=32194&status=done&style=none&width=813)
  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/22eb12639ca46ea775cc14b5068cdd70.png#align=left&display=inline&height=334&margin=[object Object]&name=image.png&originHeight=334&originWidth=1032&size=39186&status=done&style=none&width=1032)

自定义重写接口
  • 继承 ApiServiceProvider 内部类,添加 @Component 注解,重写接口:![image.png](https://www.icode9.com/i/ll/?i=img_convert/6d89debc232d15a9e6ae78f005acf489.png#align=left&display=inline&height=485&margin=[object Object]&name=image.png&originHeight=618&originWidth=739&size=74946&status=done&style=none&width=580)

##### 自定义脚本函数
  • magic-api的在线编辑页面有“接口列表”与“函数列表”,用户可在“函数列表”中定义函数,“接口列表”中引入即可调用,实例如下:

  • 首先,自定义函数compare,参数为a和b,实现两个数的比较及操作:

  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/f27dfe79112e82050a61d587481b6d51.png#align=left&display=inline&height=388&margin=[object Object]&name=image.png&originHeight=775&originWidth=1211&size=75488&status=done&style=none&width=605.5)

  • 再建立函数invoker,调用刚刚的操作:

  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/88f159ad8b96d25047a559f685f63bc9.png#align=left&display=inline&height=385&margin=[object Object]&name=image.png&originHeight=770&originWidth=1153&size=76773&status=done&style=none&width=576.5)

  • 最后,接口列表页面新建接口,调用函数invoker,执行结果如下:

  • ![image.png](https://www.icode9.com/i/ll/?i=img_convert/3d5acf37680a7ce43b93fa3b403823bd.png#align=left&display=inline&height=337&margin=[object Object]&name=image.png&originHeight=674&originWidth=1184&size=80497&status=done&style=none&width=592)

  • 以上是接口调用函数,如果接口之间相互调用则需要在 import 的内容之前加入"get:",例如import '@get:/other/assert' as test; 如下图,“demo2Linq转换”分组中的 call接口 调用“demo3其他测试”分组的 assert接口:![image.png](https://www.icode9.com/i/ll/?i=img_convert/561c8927101c1979957a4a6de0c8a206.png#align=left&display=inline&height=439&margin=[object Object]&name=image.png&originHeight=439&originWidth=849&size=43988&status=done&style=none&width=849)![image.png](https://www.icode9.com/i/ll/?i=img_convert/3682f13d060a07bc55f572b3266c7cb3.png#align=left&display=inline&height=643&margin=[object Object]&name=image.png&originHeight=643&originWidth=851&size=55725&status=done&style=none&width=851)

官方资料

官方gitee地址:https://gitee.com/ssssssss-team/magic-api
官方文档地址:https://ssssssss.org
在线demo演示地址:http://140.143.210.90:9999/magic/web

总结

主要优点:

  • 快速开发:无需定义Controller、Service、Dao、Mapper、XML等Java对象,magic-api的出发点就是在于快速开发,熟悉了之后在适当的场景中开发起来远比传统方式要快许多。
  • 在线IDE:提供Web页面,在线编写脚本,在线DEBUG,脚本编辑之后无需重启,自动热更新。
  • magic-script语法带来的便利性,比如写SQL用文本块(低版本JDK是不支持的)、结果转换用linq/lambda等。
  • 其他:代码生成试、分页、Redis、MongoDB、支持各种函数库等。


不足之处:

  • magic-script在满足基本开发需求的前提下,仍然缺少脚本格式化代码、SQL提示、接口同步、文档推送、在线管理数据源的功能,但后续会支持在线管理数据源的方案。
  • 对于多数据源事务支持的还不够好。
  • 面对逻辑复杂的应用场景,magic-api对java封装的工具类与对象仍然有较强依赖。

文章测试demo github地址

https://github.com/StephaineWYT/magic-demo


以上,谢谢浏览。

上一篇:mysql8.0.22 windows10安装记录


下一篇:Linux下mysql创建数据库和导入导出.sql文件