# lockgate-autoapi-example **Repository Path**: lockgate/lockgate-autoapi-example ## Basic Information - **Project Name**: lockgate-autoapi-example - **Description**: 自动化api接口框架,通过配置的方式自动化处理项目开发中简单重复的内容,解放生产力,使其更加专注产品业务逻辑;快速标准化输出,缩短项目研发周期 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2022-11-12 - **Last Updated**: 2024-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: codeless, lowcode, autoapi, API, Java ## README # AutoApi(自动化接口) **产品宗旨:通过配置的方式自动化处理项目开发中简单重复的内容,解放生产力,使其更加专注产品业务逻辑;快速标准化输出,缩短项目研发周期** -- ------ ### 1. 产品简介 - 通过简单的接口规则配置,自动生成13个单表crud接口 + 3个主子表关联接口,基本覆盖单表crud的所有场景 - 支持各种场景自定义,在crud基础之上增加对复杂业务场景的自定义支持 ### 2. 架构说明 #### 2.1 系统架构 ![系统架构图](img/architecture.png) #### 2.2 技术栈 |seq|选型|版本| |:---:|---|---| |1|spring boot|2.7.3| |2|spring-web|5.3.22| |3|javax.servlet-api|4.0.1| |4|spring-boot-starter-log4j2|2.7.3| |5|springdoc-openapi-ui|1.6.11| |6|spring-boot-starter-jdbc|2.7.3| |7|groovy-all|3.0.9| |8|velocity|1.7| |9|jackson-datatype-jdk8|2.13.3| ### 3. 功能说明 #### 3.1 接口全景展示 ![接口全景图](img/api_whole_scene.png "主子表13 + 3个接口列表全景") #### 3.2 部分接口示例 ##### 3.2.1 分页查询接口 ![分页查询接口示例图](img/api_query.png) ##### 3.2.2 单对象保存接口 ![单对象保存接口示例图](img/api_save.png) #### 3.3 自定义场景支持 |seq|场景|状态| |:---:|---|---| |1|自定义排序字段配置|支持| |2|查询操作自定义,比如like等|支持| |3|自定义id生成(默认数据库自增)|支持| |4|公共字段赋值的支持,如create_time/create_user等|支持| |5|自定义service实现的支持(复杂业务场景支持)|支持| |6|事务前事务后,非事务前非事务后自定义操作的支持|支持| |7|sql打印和级别定义(方便定位问题)|支持| |8|自定义基础实体类支持|支持| |9|主子表关联,支持定义对应的主表字段和字表字段|支持| |10|mysql数据库支持|支持| |11|postgres数据库支持|研发中| |12|接口定义配置支持数据库持久化(默认为配置文件)|研发中| ### 4. 开发指引 #### 4.1 注意事项 本产品仅支持数值类型的id,比如int/long等,可以是多个字段的组合id,但要求至少有一个是数值类型 #### 4.2 基础功能配置 基础的api功能,只需要执行以下几个简单的步骤,即可完成 ##### 4.2.1 配置步骤 ###### (1) 创建数据库表,范例如下 _注意事项:表字段说明会直接提现在接口上,所以表注解越详细易懂,接口说明则越清晰,沟通成本越低_ ```sql -- 订单主表 CREATE TABLE `mall_order` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID编号', `user_id` bigint NOT NULL COMMENT '用户表的用户ID', `order_no` varchar(63) NOT NULL COMMENT '订单编码', `order_status` smallint DEFAULT NULL COMMENT '订单状态', `consignee` varchar(63) DEFAULT NULL COMMENT '收货人名称', `mobile` varchar(63) DEFAULT NULL COMMENT '收货人手机号', `address` varchar(127) DEFAULT NULL COMMENT '收货具体地址', `message` varchar(512) DEFAULT '' COMMENT '用户订单留言', `goods_price` decimal(12,4) DEFAULT NULL COMMENT '商品总金额', `freight_price` decimal(12,4) DEFAULT NULL COMMENT '配送金额', `coupon_price` decimal(12,4) DEFAULT NULL COMMENT '优惠券减免金额', `integral_price` decimal(12,4) DEFAULT NULL COMMENT '用户积分减免金额', `groupon_price` decimal(12,4) DEFAULT NULL COMMENT '团购优惠价减免金额', `order_price` decimal(12,4) DEFAULT NULL COMMENT '订单金额', `actual_price` decimal(12,4) DEFAULT NULL COMMENT '实付金额', `pay_id` varchar(63) DEFAULT NULL COMMENT '微信付款编号', `pay_time` datetime DEFAULT NULL COMMENT '微信付款时间', `deleted` tinyint(1) DEFAULT '0' COMMENT '软删除', `org_code` varchar(63) DEFAULT NULL COMMENT '组织机构编码', `tenant` varchar(32) DEFAULT NULL COMMENT '租户标识', `app_id` varchar(32) DEFAULT NULL COMMENT '应用标识 - 一般是创建者应用标识', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_user` varchar(32) DEFAULT NULL COMMENT '创建人标识', `create_user_name` varchar(255) DEFAULT NULL COMMENT '创建人名称', `update_time` timestamp NULL DEFAULT NULL COMMENT '最后更新时间', `update_user` varchar(32) DEFAULT NULL COMMENT '最后更新人标识', `update_user_name` varchar(255) DEFAULT NULL COMMENT '最后更新人名称', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1574 DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- 订单明细表 CREATE TABLE `mall_order_item` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID编号', `order_id` bigint NOT NULL DEFAULT '0' COMMENT '订单表的订单ID', `brand_id` bigint DEFAULT NULL COMMENT '店铺编码', `goods_id` bigint NOT NULL DEFAULT '0' COMMENT '商品表的商品ID', `goods_name` varchar(127) DEFAULT '' COMMENT '商品名称', `goods_sn` varchar(63) DEFAULT '' COMMENT '商品编号', `product_id` int DEFAULT '0' COMMENT '货品ID', `number` smallint DEFAULT '0' COMMENT '购买数量', `price` decimal(12,4) DEFAULT '0.0000' COMMENT '售价', `specifications` text COMMENT '规格', `pic_url` varchar(255) DEFAULT '' COMMENT '图片地址', `comment` bigint DEFAULT '0' COMMENT '评价id', `deleted` tinyint(1) DEFAULT '0' COMMENT '软删除', `refund_id` bigint DEFAULT NULL COMMENT '退款跟踪ID', `org_code` varchar(63) DEFAULT NULL COMMENT '组织机构编码', `tenant` varchar(32) DEFAULT NULL COMMENT '租户标识', `app_id` varchar(32) DEFAULT NULL COMMENT '应用标识 - 一般是创建者应用标识', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_user` varchar(32) DEFAULT NULL COMMENT '创建人标识', `create_user_name` varchar(255) DEFAULT NULL COMMENT '创建人名称', `update_time` timestamp NULL DEFAULT NULL COMMENT '最后更新时间', `update_user` varchar(32) DEFAULT NULL COMMENT '最后更新人标识', `update_user_name` varchar(255) DEFAULT NULL COMMENT '最后更新人名称', PRIMARY KEY (`id`) USING BTREE, KEY `idx_01_order_item` (`order_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单明细表'; ``` ###### (2) maven仓库地址配置:settings.xml 仓库认证 ```xml lockgate-releases 63704d6128b61c88e75b4600 7669WMzm=HrM ``` 仓库profile ```xml lockgate lockgate-releases lockgate dependences https://packages.aliyun.com/maven/repository/2139326-release-jtDdoi/ ``` 激活profile ```xml lockgate ``` 完整范例 ```xml D:\repository\lockgate lockgate-releases 63704d6128b61c88e75b4600 7669WMzm=HrM AliRepo-aliyun *,!lockgate-releases Mirror Name for the Alirepo. https://maven.aliyun.com/repository/public lockgate lockgate-releases lockgate dependences https://packages.aliyun.com/maven/repository/2139326-release-jtDdoi/ lockgate ``` ###### (3) 创建springboot工程,添加如下依赖 _当前仅支持mysql数据库,所以依赖mysql支持包即可_ ```xml cn.lockgate lockgate-autoapi-support-mysql 2.0.0 ``` ###### (4) 配置application.yml或者bootstrap.yml ```yaml # 基础配置,略 # 数据源配置,略 # autoapi接口配置,如下 autoapi: config: # resource -> 配置文件, db -> 数据库 configReaderType: "resource" # api的包路径 # autoPackage: "com.nolink.demo.codeless.auto.api" # 是否强制为post forcePosting: false # 是否开启自动接口,default true autoApiEnable: true # 开启sql日志打印级别,默认为info sqlLogLevel: info # 自定义基础类 # baseDTOClass: cc.nolink.framework.dto.BaseResponseDTO # 自定义查询基础类 # baseQueryDTOClass: cc.nolink.framework.dto.BaseRequestDTO # 批处理批次大小 jdbc: batchSize: 500 maxPageSize: 1000 api: apis: - domain: "retails" # 领域,构成接口path的组成部分,规则:/domain/service/entity/action services: - service: "mall" # 服务,构成接口path的组成部分 entities: - entity: "order" # 实体,构成接口path的组成部分 table: "mall_order" # 实体对应的数据库表名 tags: tagName: "订单头表API" # 接口归类名称,默认为:entity + "API" tagDesc: "订单头表:mall_order增删改查接口" # 接口归类描述,默认为:table + "API" actions: # 支持的action,all为全部,为空则表示一个也不支持,可以自定义选择需要的接口。支持的接口全集如下 - all #- add # 新增一条记录 #- adds # 批量新增 #- updateById # 依据ID更新 #- updateByIds # 依据ID列表批量更新 #- updateByQueries # 依据自定义条件批量更新 #- save # 单个:id == null?新增:修改 #- saves # 批量:id == null?新增:修改 #- deleteById # 依据ID删除 #- deleteByIds # 依据ID列表批量删除 #- deleteByQueries # 依据自定义条件批量删除 #- findById # 依据ID查询 #- queryByIds # 依据ID列表查询列表,不带分页 #- query # 依据自定义条件查询列表,带分页 #- addWithItems # 主子表关联新增 #- deleteWithItemsById # 依据主表ID级联删除主子表 #- findWithItemsById # 依据主表ID级联查询主子表 orders: # map格式的排序规则配置,多个字段按定义的顺序进行排序 - order_no: desc # 数据库字段名:排序规则(asc/desc) - create_time: asc items: # 主子表关联配置,可以配置多个,如果没有,则不配置该items项 - tableName: "mall_order_item" # 子表名称 foreignKey: "order_id" # 子表关联字段名称 parentKey: "id" # 对应主表字段名称,默认是id - entity: "order/item" # 实体,为了path显示更合理,entity支持定义成order/item这样的格式 table: "mall_order_item" actions: # 自定义选择的action,最终接口仅仅展示选择的内容 - add - adds - updateById - save - saves - deleteById - service: "customer" entities: - entity: "customer" table: "eg_customer" actions: - all - domain: "marketing" ``` ###### (5) 启动工程,打开swagger-ui接口列表,即可提交前端进行调试 例如范例工程打开:http://127.0.0.1:8080/swagger-ui.html ![swagger效果示例](img/dev_example.png) -- ------ **更多开发说明请参考产品说明文档 https://www.jianshu.com/p/f4139dde9e97** -- ------ ### 版权说明 - 这是一个范例工程,产品本身并不提供源码,但是提供完整功能 - 产品规划目标是全行业的低代码平台,包含前后端的全功能配置,当前仅仅是后端自动接口部分的功能,请持续关注这里的变化 - 如果需要源码进行定制二开,可以联系我们 ### 联系我们 - 如果使用过程中遇到问题或者建议,请通过issue提交,我们会即时处理和回复 - 需要源码或者其他商务合作,请通过邮件联系我们,邮箱地址:lockgate@163.com