apijson是强大的工具,简化了CRUD的操作,只要有数据库表,就能自动生成RESTFUL接口。但初次上手也是摸索了很长时间,尤其是部署与使用上,这里尝试以初学者角度来说下:
一、好处
1、对于简单的应用,只需要建表,自动生成RESTFUL的CRUD接口,时间节省明显;
2、支持跨表、筛选等复杂的数据库查询;
3、大厂出口,品质优秀
详细的就不介绍了,可上官网查看:apijson.cn
二、快速上手
直接使用官方APIJSON-Demo。
- 必要条件
安装好Java和Maven (Maven设置为阿里源,这样下载包更快)。
- 下载示例
git clone https://github.com/APIJSON/APIJSON-Demo.git
或者
git clone https://gitee.com/APIJSON/APIJSON-Demo.git
示例中有很多项目,满足不同的使用场景。
- 数据库准备(Mysql为例)
进入下载好的目录,找到sys.sql文件,路径在:APIJSON-Demo/MySQL/sys.sql
使用数据库管理工具,导入sql文件并执行,会把apijson运行所需要的数据库文件建表,并提供案例。
运行后,生成如下的数据表:
- 修改java配置文件
这里使用APIJSONDemo项目 (路径在:APIJSON-Demo/APIJSON-Java-Server/APIJSONDemo
),APIJSONDemo 使用了apijson-framework,自动化更强。
配置文件主要用于设定数据库连接的参数,主机、数据库和密码。
- 默认是sys数据库,可以自定义,这样现有的数据库不用改动。
- !!! 要自动化更高(部署好后就不用修改后端代码),自己的数据表名必须是大写字母开头,列名不要是中文,不然可以返回状态码200,但取不到需要的数据。
- 找到DEFAULT_SCHEMA ,变成自己的数据库
- 找到 public String getDBUri() ,修改数据库主机和端口号
- 找到 public String getDBAccount() ,修改数据库登录账号
- 找到 public String getDBPassword() ,修改数据库登录密码
如果自己的数据表是小写,或者中文,需要在代码里单独设置一下别名 ,使用:TABLE_KEY_MAP.put()
如示例sys数据库下的表是 apijson_user,映射为大写开关的名称:
TABLE_KEY_MAP.put("User", "apijson_user");
/*Copyright ©2016 TommyLemon(https://github.com/TommyLemon/APIJSON)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.*/
package apijson.demo;
import com.alibaba.fastjson.annotation.JSONField;
import apijson.framework.APIJSONSQLConfig;
/**SQL 配置
* TiDB 用法和 MySQL 一致
* 具体见详细的说明文档 C.开发说明 C-1-1.修改数据库链接
* https://github.com/Tencent/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md#c-1-1%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E9%93%BE%E6%8E%A5
* @author Lemon
*/
public class DemoSQLConfig extends APIJSONSQLConfig {
static {
DEFAULT_DATABASE = DATABASE_MYSQL; // TODO 默认数据库类型,改成你自己的
DEFAULT_SCHEMA = "mydb"; // TODO 默认数据库名/模式,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:
// 表名和数据库不一致的,需要配置映射关系。只使用 APIJSONORM 时才需要;
// 如果用了 apijson-framework 且调用了 APIJSONApplication.init 则不需要
// (间接调用 DemoVerifier.init 方法读取数据库 Access 表来替代手动输入配置)。
// 但如果 Access 这张表的对外表名与数据库实际表名不一致,仍然需要这里注册。例如
// TABLE_KEY_MAP.put(Access.class.getSimpleName(), "access");
//表名映射,隐藏真实表名,对安全要求很高的表可以这么做
TABLE_KEY_MAP.put("User", "apijson_user");
TABLE_KEY_MAP.put("Privacy", "apijson_privacy");
}
@Override
public String getDBVersion() {
return "5.7.22"; // "8.0.11"; // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 // MYSQL 8 和 7 使用的 JDBC 配置不一样
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBUri() {
return "jdbc:mysql://localhost:3307?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; // TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBAccount() {
return "myacount"; // TODO 改成你自己的
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBPassword() {
return "mypassword"; // TODO 改成你自己的,TiDB 可以当成 MySQL 使用, 默认密码为空字符串 ""
}
}
- 打包并运行
命令行中回到项目目录APIJSONDemo ,如:
cd ~/APIJSON-Demo/APIJSON-Java-Server/APIJSONDemo
运行 MAVEN 的 mvn 命令,在target目录中生成jar文件:
mvn clean install
在当前目录中,运行生成的jar文件,默认端口 8080:
java -jar target/apijson-demo-7.1.5.jar
要偷懒也可以使用通配符*
java -jar target/*.jar
- 测试
在官网找到测试工具,也可以使用curl, swagger, postman等。
修改服务器地址,及POST/GET等选项,点击发送请求:
返回json格式数据:
6. 其他
如果要自定义java bean 或者 登陆验证等其他后端开发需求,可以看APIJSONBoot项目