Skip to content

快速开始

本页用一个最小可运行的服务,演示从空工程到第一个分页接口。

使用前须取得授权

HiAPI 是专有商业软件。构件可从 Maven Central 公开获取,但获取不等于获得授权, 正式使用前请先完成商业授权。详见授权说明

前置条件

  • JDK 21
  • Maven 3.9+
  • MySQL 与 Redis 各一个可用实例

一、引入框架

把框架作为 parent,即可继承全部依赖版本管理。不需要配置任何私有仓库—— 构件在 Maven Central 上,那是 Maven 的默认仓库。

xml
<parent>
    <groupId>cn.hiapi</groupId>
    <artifactId>hiapi-fast-frame</artifactId>
    <version>1.0.8</version>
</parent>

然后按需引入模块。一个典型的 Web 服务通常需要:

xml
<dependencies>
    <dependency>
        <groupId>cn.hiapi</groupId>
        <artifactId>hiapi-core-application</artifactId>
    </dependency>
    <dependency>
        <groupId>cn.hiapi</groupId>
        <artifactId>hiapi-core-controller</artifactId>
    </dependency>
    <dependency>
        <groupId>cn.hiapi</groupId>
        <artifactId>hiapi-core-service</artifactId>
    </dependency>
    <dependency>
        <groupId>cn.hiapi</groupId>
        <artifactId>hiapi-core-security</artifactId>
    </dependency>
</dependencies>

版本号由 parent 统一管理,这里不写 <version>

二、启动类

继承框架提供的启动基类,它已经带了 @SpringBootApplication,不要重复标注:

java
package com.example.demo;

import cn.hiapi.BasicApplication;
import org.springframework.boot.SpringApplication;

public class DemoApplication extends BasicApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void onStartup() {
        // 启动完成后的初始化逻辑,可选
    }
}

微服务部署(接入注册中心、需要跨服务调用)时改为继承 BasicCloudApplication

三、最小配置

yaml
spring:
  application:
    name: demo-service

  datasource:
    url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: your_user
    password: your_password

  data:
    redis:
      host: 127.0.0.1
      port: 6379

  hiapi:
    security:
      url-role:
        # 细粒度授权需要本服务提供 URL→角色规则源。
        # 尚未提供时显式声明 none,否则框架会在启动时拒绝启动 ——
        # 这是刻意设计,避免"以为有权限控制、实际没有"的情况悄悄上线。
        mode: none

# traceId 需要这一行才会出现在日志里
logging:
  pattern:
    level: "%5p [%X{traceId:-}]"

四、第一个接口

定义实体与查询对象后,Controller 继承基类即可:

java
@RestController
@RequestMapping("/merchant/product")
public class ProductController
        extends BasicCurdController<Product, Long, ProductVo, ProductQuery> {

    @Override
    protected Long getMid() {
        return TokenGet.getMid();   // 租户隔离键
    }

    @Override
    protected List<ProductVo> toListVo(List<Product> list) {
        return list.stream().map(ProductVo::of).toList();
    }
}

启动后即可获得:

方法与路径作用
GET /merchant/product/query分页查询(带条件与排序)
GET /merchant/product/get按 id 取详情
POST /merchant/product/save新增
POST /merchant/product/update修改
DELETE /merchant/product/delete删除

只需要查询能力而不希望暴露写接口时,继承 BasicQueryController 即可。

五、写入用字段描述

更新时不要读出整个对象再存回去,直接描述要改的字段,避免并发覆盖:

java
service.update(
        UpdateFields.newBuilder().put("status", 1).build(),
        QueryWrapper.create().eq("mid", TokenGet.getMid()).eq("id", id)
);

下一步

本软件为专有商业软件,使用须取得书面授权。