magic API构建和基础实现
magic-api简介
- magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。
- 之前我们开发一个接口,至少需要Controller,Service,Dao,Mapper文件,还需要各种配置,搭建启动springboot项目,发布完成,接口才能访问,接口才算完成。
项目准备
1)新建一个SpringBoot的项目,导入数据库需要的依赖:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version></dependency>
2)新建数据库和表
3)在配置文件配置数据源
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: root
2.2 加入magic-api⭐
1)在pom.xml中添加magic-api相关依赖:
<dependency><groupId>org.ssssssss</groupId><artifactId>magic-api-spring-boot-starter</artifactId><version>1.2.1</version>
</dependency>
2)在配置文件配置magic-api相关信息
magic-api:# 配置api管理页面入口web: /magic/web# 配置存储方式resource:# 配置接口资源存储位置,可选file、database、redistype: database# 存储表名tableName: magic_api_file# 使用database、redis存储时的key前缀prefix: /db2020# 是否是只读模式readonly: false# 启用驼峰命名转换sql-column-case: camel# 分页配置page-config:# 页大小的请求参数名称size: size# 页码的请求参数名称page: page# 未传页码时的默认页码default-page: 1# 未传页大小时的默认页大小default-size: 10
3)创建表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`)
)
4)启动项目,访问http://localhost:8080/magic/web,即可进入magic的管理页面
基本用法
添加
return db.table('user').insert(body);
修改
return db.table('user').primary('id',body.id).update(body);
删除
return db.update('delete from user where id=#{id}');
查询
return db.table('user'
.where()
.eq('id',path.id)
.selectone();
分页查询
magic语法
- db模块
(1)db是默认引入的模块,使用此模块操作数据库,需要使用return把结果返回。
(2)db.table()就指定了表名,可以使用期自带的方法进行查询等操作,但其只能对单表进行操作,多表无法使用。 - 自定义查询
根据sql查询结果,返回的是list集合。select()
return db.select('select * from user')
若需要携带参数,可以使用#{}进行占位,其他查询类似。select()
return db.select('select * from user where id = #{id} ')
根据sql查询结果,返回的是int值。selectInt()
return db.selectInt('select count(*) from user')
查询单个对象,其返回值必须是小于等于一条数据,不能超过一条。selectOne()
return db.selectOne('select * from user where id = #{id} ')
查询单个列的值。若查询结果是多条,则只会返回第一条数据的对应字段信息。selectValue()
return db.selectValue('select username from user where id = #{id}');
分页查询。要传递分页的条件(当前页码page,每页条数size),会返回数据总条数和数据集合。page()
return db.page('select * from user')return db.table('user').page()
对于增删改操作,都可以使用此方法,不过一般删除会使用此方法,添加和修改均使用db.table()方式。原因是此方法必须使用get请求传递参数,不安全。update()
return db.update('delete from user where id=#{id}');//post
return db.table('user').primary('id',body.id).update(body);
集成Swagger⭐
1)导入Swagger相关依赖
<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>
2)在配置文件application.yml中添加Swagger相关配置。
magic-api:# 集成Swagger配置swagger-config:# 文档名称name: MagicAPI# 文档标题title: MagicAPI Swagger Docs# 文档描述description: MagicAPI# 文档版本号version: 1.0# 文档资源位置location: /v2/api-docs/magic-api/swagger2.json
3)重启项目,访问Swagger界面http://localhost:8080/swagger-ui.html,即可查看我们在magic-api中写的接口
拦截器配置
在开发环境,可以使用magic进行接口的开发,但是在正式环境中,其页面是不能暴露出来的,同时swagger在正式环境也不能暴露。故需要拦截器进行拦截,同时其自带SQL的拦截器,可以打印SQL的日志信息。
/*** 拦截器配置*/
@Component
public class MyInterceptor implements SQLInterceptor, HandlerInterceptor {Logger logger = LoggerFactory.getLogger(this.getClass());@Value("${isAllowed}")private Boolean isAllowed;/**** 自定义SQL拦截器,打印sql及参数* @param boundSql* @param requestEntity*/@Overridepublic void preHandle(BoundSql boundSql, RequestEntity requestEntity) {logger.warn("执行的SQL===> " + boundSql.getSql());logger.warn("执行的SQL参数===> " + Arrays.toString(boundSql.getParameters()));}/*** 配置资源拦截器,开发页面只能在开发中使用,在正式环境拦截** @param request* @param response* @param handler* @return*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {if (!isAllowed) {Map<String, Object> result = new HashMap<>();result.put("msg", "抱歉,未找到可访问资源!");result.put("status", false);response.setCharacterEncoding("utf-8");response.setHeader("Content-type", "text/html;charset=UTF-8");response.getWriter().write(JSON.toJSONString(result));return false;}return true;}
}
还需要一个MVC的配置其注入拦截器和要拦截的资源:
/*** mvc配置,注入拦截器*/
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//addPathPatterns表示拦截所有请求,excludePathPatterns表示不拦截的请求registry.addInterceptor(myInterceptor).addPathPatterns("/swagger-ui.html").addPathPatterns("/magic/**");}
}
就可以通过修改isAllowed的值选择是否可访问。到这里,基本的接口开发已经完成,只需前端进行整合即可。
magic API构建和基础实现相关推荐
- FreeMarker中文帮助手册API文档,基础入门学习文档
FreeMarker中文帮助手册API文档,基础入门学习文档 分类: 编程技术 发布: bywei 浏览: 7 日期: 2011年5月28日 分享到: QQ空间 新浪微博 腾讯微博 人人网 什么是Fr ...
- 使用Nomad构建弹性基础架构: 作业生命周期
这是Nomad构建弹性基础架构系列(第1部分,第2部分)中的第三部分.在本系列中,我们将探讨Nomad如何处理意外故障.停机和集群基础架构的日常维护,通常不需要操作员干预. 在本文中,我们将介绍Nom ...
- 使用Nomad构建弹性基础架构:重新启动任务
Nomad是一个功能强大.灵活的调度器,适用于长期运行的服务和批处理任务.通过广泛的驱动程序,Nomad可以调度基于容器的工作负载.原始二进制文件.java应用程序等等.Nomad操作简单,易伸缩,与 ...
- 【物体检测快速入门系列 | 01 】基于Tensorflow2.x Object Detection API构建自定义物体检测器
这是机器未来的第1篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124745966 CSDN话题挑战赛第1期 活动详情地址 ...
- 使用 OpenAI API 构建 Next.js 应用程序的初学者指南
欢迎阅读我们的初学者指南,了解如何使用 OpenAI API 构建 Next.js 应用程序.在本教程中,我们将引导您完成利用 OpenAI API 的功能创建功能强大且智能的 Next.js 应用程 ...
- JPA 2.0 中的动态类型安全查询(如何通过 Criteria API 构建动态查询并减少运行时失败)...
简介: 如果编译器能够对查询执行语法正确性检查,那么对于 Java 对象而言该查询就是类型安全的.Java™Persistence API (JPA) 的 2.0 版本引入了 Criteria AP ...
- Gradle2.0用户指南翻译——第六章. 构建脚本基础
翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tre ...
- SpringBoot整合Swagger测试api构建
@Author:SimpleWu 什么是Swagger? Swagger是什么:THE WORLD'S MOST POPULAR API TOOLING 根据官网的介绍: Swagger Inspec ...
- 使用Nomad构建弹性基础架构: 容错和中断恢复
这是Nomad构建弹性基础架构系列文章的第四篇也是最后一篇(第1部分,第2部分,第3部分).在本系列文章中,我们将探讨Nomad如何处理意外故障.停机和集群基础设施的常规维护,通常不需要操作员干预. ...
- 使用Nomad构建弹性基础架构:计划和自我修复
这是 使用Nomad构建弹性基础架构 系列文章的第二篇.在本系列中,我们将探讨Nomad如何处理意外故障.停机和集群基础设施的常规维护,通常不需要操作员干预. 在这篇文章中,我们将会看到Nomad客户 ...
最新文章
- sql server规范
- 中文WAP浏览器WapDisplayer V1.5发布
- LCD1602液晶显示
- php mysqli result,PHP mysqli_free_result()与mysqli_fetch_array()函数详解
- html表单验证元素必填,JavaScript 表单验证
- 计算机毕业论文工作进展情况,论文中期检查进展怎么写_论文中期检查表怎么写_论文进展情况怎么写...
- 花体字转换器微信小程序源码支持多种花样字体不同风格
- JAVA大型OA协同办公系统源码【源码免费分享】
- 大学生创新创业类竞赛参赛指南
- 开心网kaixin001状告kaixin,停用“开心网”名称,赔偿1000万元并公开道歉
- laravel框架中Cache缓存类中的原子锁
- Android关于libs,jniLibs库的基本使用说明及冲突解决
- 不习惯的 Vue3 起步六 の Echarts绘制下钻地图
- 关闭/删除“设备和驱动器”里的图标(如迅雷下载、WPS网盘)
- c++,全局函数做友名
- 自签名多级证书亲测可用
- bzoj4137[FJOI2015]火星商店问题
- Java基础——Java多继承的三种实现方式
- WPA_CLI 的介绍:介绍如何使用wpa_cli连接WiFi的方法
- SeekBarVolumizer.java