magic-api使用

基本知识以及语法更多可以通过官网进行了解:magic-api官网简介

本文主要做一个简易了解以及实战记录!

magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口。 无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发

1. 入门

相关的配置文件以及依赖包:

maven引入

xml 复制代码
<!-- 以spring-boot-starter的方式引用 -->
<dependency>
	<groupId>org.ssssssss</groupId>
    <artifactId>magic-api-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

修改application.properties

bash 复制代码
server.port=8088
#配置web页面入口
magic-api.web=/magic/web
#配置文件存储位置。当以classpath开头时,为只读模式
magic-api.resource.location=/data/magic-api

后续配置spingboot的启动文件即可:

项目启动平台:

基本的代码都可以测试,但是数据源无法测试连接:http://ip:端口号/magic/web/index.html

用什么数据库,就需要配置什么数据库依赖包!!

以下分别是mysql、oracle、sqlserver的依赖包:

xml 复制代码
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.27</version>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
</dependency>
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>

2. 强化

后续的强化围绕后端数据库的CRUD

添加依赖

引入Spring Boot Starter父工程:

xml 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.1</version>
    <relativePath/>
</parent>

引入magic-api-spring-boot-starter依赖

xml 复制代码
<dependency>
    <groupId>org.ssssssss</groupId>
    <artifactId>magic-api-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

引入spring-boot-starter,spring-boot-starter-web, spring-boot-starter-test, mysql依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.27</version>
</dependency>

配置

application.yml

yml 复制代码
server:
  port: 8088
magic-api:
  #配置web页面入口
  web: /magic/web
  resource:
  	#配置文件存储位置。当以classpath开头时,为只读模式
    #mac用户请改为可读写的目录
    #如果不想存到文件中,可以参考配置将接口信息存到数据库、Redis中(或自定义)
    location: D:/data/magic-api

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/magic-api-test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: test

重新启动就可以配置数据源:

实战中的Demo:

默认的数据源配置对应代码文件中的配置,配置好之后,对应执行相关表即可:

如果不需要使用代码文件中的配置:

后续如果需要访问,直接通过对应接口即可:http://localhost:8088/test/test

对数据库的CRUD:单表crud接口

3. 实战

实战中各种Demo:

带参数的查询:

java 复制代码
import request;

var sql = """
    SELECT * FROM `xxx` where 1=1
   <if test="applyNo != null and applyNo != ''">
         and apply_no = #{applyNo}
   </if>

"""
var data =  db.select(sql);

return data;

对应的接口示例:

类似Java中的JDBC:

后续如果使用Redis等代码,需要做好配置文件:

yml 复制代码
spring:
  redis:
    host: localhost
    port: 6379

相关的Demo:Java关于RedisTemplate的使用分析 附代码

实战中的截图如下:

对应抽离给出一个Demo:

java 复制代码
import org.springframework.data.redis.core.StringRedisTemplate;
import cn.hutool.json.JSONUtil;
import java.util.concurrent.TimeUnit;

/**
 * 教学版:基于 Redis 缓存的查询优化示例
 * 主要步骤:
 * 1. 从 Redis 中检查数据是否已缓存(通过键)。
 * 2. 如果缓存命中,直接返回数据。
 * 3. 如果缓存未命中,从数据库查询数据并写入 Redis。
 */
public class RedisCacheDemo {

    private final StringRedisTemplate redisTemplate;

    // 缓存过期时间(秒)
    private static final int CACHE_EXPIRE_SECONDS = 60;

    public RedisCacheDemo(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 根据查询条件获取数据(带缓存功能)。
     *
     * @param queryParam 查询参数(模拟,如某个标识符)。
     * @return 查询结果(JSON 格式)。
     */
    public Object getDataWithCache(String queryParam) {
        // 动态生成 Redis 缓存的键
        String cacheKey = (queryParam != null)
                ? "/example_prefix/" + queryParam.toUpperCase()
                : "/example_prefix/default";

        System.out.println("Generated Redis Key: " + cacheKey);

        // 获取当前键的剩余 TTL(秒)
        Long ttl = redisTemplate.getExpire(cacheKey, TimeUnit.SECONDS);
        System.out.println("TTL for Key: " + ttl);

        // 检查缓存是否命中(TTL > 0 表示存在且未过期)
        if (ttl != null && ttl > 0) {
            String cachedValue = redisTemplate.opsForValue().get(cacheKey);
            if (cachedValue != null) {
                System.out.println("Cache hit. Returning cached data.");
                return JSONUtil.parse(cachedValue); // 解析 JSON 数据并返回
            }
        }

        // 模拟缓存未命中的情况:从数据库查询数据
        System.out.println("Cache miss. Querying database...");

        // 模拟数据库查询结果
        String dbResult = """
            [
                {"field1": "value1", "field2": "value2"},
                {"field1": "value3", "field2": "value4"}
            ]
        """;

        // 将查询结果写入 Redis 缓存
        redisTemplate.opsForValue().set(
                cacheKey,
                dbResult,
                CACHE_EXPIRE_SECONDS,
                TimeUnit.SECONDS
        );

        System.out.println("Data cached in Redis with key: " + cacheKey);

        // 返回查询结果
        return JSONUtil.parse(dbResult);
    }
}

4. 彩蛋

如果引用的函数不存在,需要相应的引入依赖包:

否则会报错:

对应依赖包:

xml 复制代码
<!-- https://mvnrepository.com/artifact/io.minio/minio -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.7</version>
</dependency>

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version> <!-- 确保版本是最新的或与你的项目兼容 -->
</dependency>
相关推荐
用户89535603282203 小时前
Goroutine + Channel 高效在哪?一文吃透 Go 并发底层 G-M-P 调度与实现
后端·go
鸽芷咕3 小时前
静态住宅 IP 实战测评:手把手教你高效获取全球前沿资讯
后端
西召3 小时前
Spring Kafka 动态消费实现案例
java·后端·kafka
lomocode3 小时前
前端传了个 null,后端直接炸了——防御性编程原来这么重要!
后端·ai编程
镜花水月linyi3 小时前
ThreadLocal 深度解析(上)
java·后端
镜花水月linyi3 小时前
ThreadLocal 深度解析(下)
java·后端
JavaEdge.3 小时前
Spring数据源配置
java·后端·spring
铭毅天下3 小时前
Spring Boot + Easy-ES 3.0 + Easyearch 实战:从 CRUD 到“避坑”指南
java·spring boot·后端·spring·elasticsearch
李慕婉学姐3 小时前
【开题答辩过程】以《基于Springboot的惠美乡村助农系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端