APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置

2024-04-21 07:38

本文主要是介绍APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、项目导入
  • 二、数据库搭建及配置
  • 三、运行项目并访问接口
  • 四、apijson语法
    • 1.查询
    • 2.插入数据
    • 3.修改数据
    • 4.删除数据
    • 5.登录
  • 五、如何新增接口
  • 六、大坑
    • 1.id

最近因搬砖需要看这个,用来简化持久层,所以学了一下,写了个教程,还是比较容易上手的。


官方文档:点击跳转


  • 开发工具:IDEA
  • jdk:1.8
  • 数据库:mysql
  • 测试网站:http://apijson.cn/api/

更多测试用例:

登陆后,点击这个图标:

在这里插入图片描述


一、项目导入

下载大文件夹:APIJSON-Demo

下载好后,在IDEA中导入APIJSON-Demo/APIJSON-Java-Server/APIJSONDemo,并在application.yml中做如下配置:

server:
#  端口号port: 8086tomcat:uri-encoding: utf-8
#      tomcat header最大缓冲max-http-header-size: 8192

二、数据库搭建及配置

在项目中新建一个文件夹sql用来装数据库测试数据,然后把APIJSON-Demo/MYSQL/single目录中的sql文件复制过来:

在这里插入图片描述

然后下面来改一下数据库的相关配置

首先在navicat for mysql中建立好数据库apijson:

在这里插入图片描述

然后需要修改下DemoSQLConfig类中的代码:

首先是static块中的:

DEFAULT_DATABASE = DATABASE_MYSQL;  // TODO 默认数据库类型,改成你自己的
DEFAULT_SCHEMA = "apijson";  // TODO 数据库名

然后是数据库版本号:

@Override
public String getDBVersion() {return "8.0.23";  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 
}

以及数据库的相关信息:

@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBUri() {return "jdbc:mysql://localhost:3306"; // TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000
}@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBAccount() {return "root";  // TODO 改成你自己的
}@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBPassword() {return "密码";  // TODO 改成你自己的,TiDB 可以当成 MySQL 使用, 默认密码为空字符串 ""
}

接下来是搭建数据库

先连接上数据库:

在这里插入图片描述

连接好后选中所有sql文件,然后右键运行:

在这里插入图片描述

运行完后数据库中就有数据了:

在这里插入图片描述

三、运行项目并访问接口

在这里插入图片描述

运行好后,去apijson.org/auto/这个网站调一下接口试试(别的网站或插件也可以):

在这里插入图片描述

发送请求后如果没有问题右边会显示数据:

在这里插入图片描述

四、apijson语法

项目跑通后,我们来学习下apijson的语法,实现更加强大的增删改查功能。

注意: 表名首字母要大写,这可以在access表中进行配置。

1.查询

字段过滤

在这里插入图片描述

字段别名

在这里插入图片描述

显示多个结果

在这里插入图片描述
逻辑运算

查询userId在82002,82003中的。数据默认显示第一页,每页10条,怎么设置后面会讲:

在这里插入图片描述

查询userId>=82003并且<=82006的:

{"[]": {"Comment": {"userId&{}": ">=82003,<=82006","@column": "id,userId:user,content:cont"}}
}

查询userId>=82003或<=82006的:

{"[]": {"Comment": {"userId|{}": ">=82003,<=82006","@column": "id,userId:user,content:cont"}}
}

查询userId不在范围内的:

{"[]": {"Comment": {"userId!{}": [82003,82006],"@column": "id,userId:user,content:cont"}}
}

可以组合多条逻辑查询条件:

{"[]": {"Comment": {"userId!{}": [82003,82006],"userId&{}": ">=82000,<=82002","@column": "id,userId:user,content:cont"}}
}

模糊查询

{"[]": {"Comment": {"content$":"%eave%","@column": "id,content:cont"}}
}

正则匹配

这部分比较繁琐,用的时候直接查资料,参考资料:

在这里插入图片描述

分页

page表示当前页数,count表示每页显示的记录条数:

{"[]": {"Comment": {"userId{}":[82002,82003,82003],"@column": "id,userId:user,content:cont"},"page":0,"count":5}
}

下面令query为1,表示查询数据总条数:

{"[]": {"Comment": {"@column": "id,userId:user,content:cont"},"query": 1},"total@": "/[]/total"
}

排序

date-表示按date降序排序,id+表示升序,momentId没写符号默认是升序:

{"[]": {"Comment": {"@column": "id,date,momentId,content:cont","@order": "date-,id+,momentId"}}
}

关联查询

{"[]": {"Moment": {"@column": "id,date,userId","id": 12},"User": {"id@": "/Moment/userId","@column": "id,name"}}
}

查询结果如下:

在这里插入图片描述

函数

apijson支持的函数:

在这里插入图片描述

@column后面使用了函数后只能写一列,写多列会报错,还没搞明白为什么:

{"[]": {"Comment": {"userId&{}": ">=80000,<=82006","@column": "max(id):maxid"}}
}

分组

{"[]": {"Comment": {"userId&{}": ">=80000,<=82006","@column": "userId:user","@group": "userId"}}
}

2.插入数据

首先要确定DemoController类中已经写好了相应的插入数据方法。

apijson插入语法如下:

{"Moment": {"content": "今天天气不错,到处都是提拉米苏雪","userId": 38710,"id": 16,"date": "2017-02-08 16:06:11","praiseUserIdList": "[70793, 93793, 82044, 82040, 82055, 90814, 38710, 82002, 82006, 1508072105320, 82001]"},"tag": "Moment"
}

成功页面:

在这里插入图片描述

3.修改数据

和插入数据语法一样:

{"Moment": {"content": "修改:今天天气不错,到处都是提拉米苏雪","userId": 38710,"id": 12,"date": "2017-02-08 16:06:11","praiseUserIdList": "[70793, 93793, 82044, 82040, 82055, 90814, 38710, 82002, 82006, 1508072105320, 82001]"},"tag": "Moment"
}

对json类型数据进行修改:加号代表添加元素,减号代表删除元素:

{"Moment":{"id":1544520921923,"praiseUserIdList+": [123]},"tag":"Moment"
}

4.删除数据

{"Moment": {"id": 12},"tag": "Moment"
}

5.登录

关于这部分还没搞懂,先在这里占个坑

五、如何新增接口

先在数据库里新增一张表:

在这里插入图片描述

运行项目,就能查询接口了:

在这里插入图片描述

六、大坑

1.id

每张数据库表的主键必须命名为id,不然会报错,做项目的时候这个bug卡了我一天我才发现原来是这样,服了!

这篇关于APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922518

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3