Magic-API使用

1、环境搭建
2、Magic-API界面说明
3、自定义结果结构、错误提示
package com.example.config;

import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.context.RequestEntity;
import org.ssssssss.magicapi.core.interceptor.ResultProvider;
import org.ssssssss.magicapi.modules.db.model.Page;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: 何
 * @date: 2023-06-19 14:47
 * @description: 统一请求响应配置类
 */
@Component
public class CustomJsonValueProvider implements ResultProvider {
    @Override
    public Object buildResult(RequestEntity requestEntity, Throwable root) {
        return ResultProvider.super.buildResult(requestEntity, root);
    }

    @Override
    public Object buildResult(RequestEntity requestEntity, Object data) {
        return ResultProvider.super.buildResult(requestEntity, data);
    }

    @Override
    public Object buildResult(RequestEntity requestEntity, int code, String message) {
        return ResultProvider.super.buildResult(requestEntity, code, message);
    }

    /**
     * 全局异常处理
     */
    @Override
    public Object buildException(RequestEntity requestEntity, Throwable throwable) {
        return buildResult(requestEntity, 500, "系统错误,请联系管理员!");
    }

    /**
     * 定义返回结果,默认返回JsonBean
     */
    @Override
    public Object buildResult(RequestEntity requestEntity, int code, String message, Object data) {
        // 如果对分页格式有要求的话,可以对data的类型进行判断,进而返回不同的格式

        return new HashMap<String, Object>() {
            {
                put("code", code);
                put("msg", message);
                put("data", data);
            }
        };
    }

    /**
     * 定义分页返回结果,该项会被封装在Json结果内,
     * 此方法可以不覆盖,默认返回PageResult
     */
    @Override
    public Object buildPageResult(RequestEntity requestEntity, Page page, long total, List<Map<String, Object>> data) {
        return new HashMap<String, Object>() {
            {
                put("total", total);
                put("items", data != null ? data : new ArrayList<>(0));
            }
        };
    }
}
4、自动填充字段配置
  • 注:只能单表操作使用
package com.example.config;

import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.modules.db.inteceptor.NamedTableInterceptor;
import org.ssssssss.magicapi.modules.db.model.SqlMode;
import org.ssssssss.magicapi.modules.db.table.NamedTable;

import java.util.Date;

/**
 * @author: 何超
 * @date: 2023-06-25 08:48
 * @description: 自动填充配置
 */
@Component
public class MyNamedTableInterceptor implements NamedTableInterceptor {

    /*
     * 执行单表操作之前
     */
    @Override
    public void preHandle(SqlMode sqlMode, NamedTable namedTable) {
        if (sqlMode == sqlMode.INSERT) {
            namedTable.column("CreateTime", new Date());
        }
        if (sqlMode == sqlMode.UPDATE) {
            namedTable.column("UpdateTime", new Date());
        }
    }
}

5、CRUD
  • 数据库准备
create table tb_user
(
    id            int auto_increment
        primary key,
    username      varchar(100)                        null comment '用户名',
    password      varchar(150)                        null comment '密码',
    CreateTime    timestamp default CURRENT_TIMESTAMP null comment '创建时间',
    LoginLastTime timestamp default CURRENT_TIMESTAMP null comment '最后登录时间'
);

insert into shopp.tb_user (id, username, password, CreateTime, LoginLastTime)
values  (1, 'admin', '20a95ceec8c7c414a890eedf942afcc8', '2023-06-29 14:43:10', '2023-07-14 10:15:17');
  • 分页模糊查询
    • magic-api中代码
    return db.page("""
    select * from tb_user
    <where>
       <if test="username != null and username != ''">
           and username like concat('%',#{username},'%')
       </if>
    </where>
    """)
    
    • magic-api中发起请求
      在这里插入图片描述
    • 请求结果
      在这里插入图片描述
  • 新增
    • magic-api中代码
    import 'com.example.utils.Md5Util' as Md5Util
    var username = body.username
    var password = Md5Util.genMd5(body.password)
    
    var count = db.selectInt("select count(*) from tb_user where username = #{username}")
    if (count > 0){
    	exit "400","用户名已存在!"
    }
    var sql = """
     	insert into tb_user(username,password,CreateTime) values(#{username},#{password},now())
    """
    db.insert(sql)
    
    • magic-api中请求
      在这里插入图片描述
  • 修改
    • magic-api中代码
    var sql = """
    	update tb_user
    	set username = #{body.username}
    	where id = #{body.id}
    """
    return db.update(sql)
    
    • magic-api中请求
      在这里插入图片描述
  • 删除
    • magic-api中代码
    import 'com.example.utils.JwtUtil' as JwtUtil
    var userId = JwtUtil.getUserId()
    if (userId == id){
    	exit 400, "不能删除当前登录用户";
    }
    var sql = """
    	delete from tb_user where id = #{id}
    """
    db.update(sql)
    
    • magic-api中请求
      在这里插入图片描述
  • 批量删除
    • magic-api中代码
    import 'com.example.utils.JwtUtil' as JwtUtil
    var userId = JwtUtil.getUserId()
    
    if (ids.contains(String.valueOf(userId))){
     	exit 400, "不能删除当前登录用户";
    }
    var sql = """
    	delete from tb_user where id in (${ids})
    """
    db.update(sql)
    
    • magic-api中请求
      在这里插入图片描述
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发减一.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值