前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mock14-拦截器服务实现(五) 规则查询代码

Mock14-拦截器服务实现(五) 规则查询代码

作者头像
MegaQi
发布于 2024-01-17 06:34:07
发布于 2024-01-17 06:34:07
11400
代码可运行
举报
运行总次数:0
代码可运行

本篇为上一篇留个大家独立思考实现逻辑代码的参考,不做过渡的重复讲解。

规则配置数据表

创建一个基本规则映射表,其中预留个扩展高级处理配置字段。表名字为 mock_rule

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table mock_rule
(
    rule_id             int auto_increment comment '规则自增ID'
        primary key,
    rule_api_id         int                                not null comment '所属api的ID',
    rule_title          varchar(100)                       not null comment '规则标题',
    rule_type           varchar(50)                        not null comment '规则类型',
    rule_enable         tinyint                            null comment '状态',
    rule_request_filter varchar(1000)                      null comment '匹配规则',
    rule_response_body  text                               null comment '规则匹配返回内容',
    rule_response_code  int                                null comment '规则接口返回状态码',
    rule_shell          text                               null,
    rule_create_user    varchar(50)                        null comment '规则创建人',
    rule_create_date    datetime default CURRENT_TIMESTAMP null,
    rule_update_user    varchar(50)                        null comment '规则修改人',
    rule_update_date    datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '规则修改时间'
)
    comment '接口规则表';

插入两条备用测试数据

规则表操作

继续Spring Boot针对数据查询基本套路,分别创建实体类和服务类。

实体类

编写数据库mock_rule的字段匹配的实体类,注意此类中字段名和表属性名映射将在mapper做处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QMockApiRuleEntity extends QBaseEntity implements Serializable {

    private Long id;
    private Long apiId;
    private String title;
    private String type;
    private int enable;
    private JSONArray reqFilter;
    private JSONObject resBody;
    private int resCode = 200;
    private String shell;

在服务类 QMockService 继续追加对应业务处理,即通过api的id查询所属配置规则列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service("QMockService")
public class QMockService{

    @Autowired
    private QMockApiRuleMapper qMockApiRuleMapper;

    public List<QMockApiRuleEntity> selectApiRuleList(Long apiId) {
        List<QMockApiRuleEntity> mockApiRuleEntities = qMockApiRuleMapper.getMockApiRuleLisByApiId(apiId);
        return mockApiRuleEntities;
    }
}

数据操作

查询条件为rule_id对应的值,并且需要配置@Results对实体类和数据表实际字段名的映射。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Mapper
public interface QMockApiRuleMapper {

    @Select("SELECT * from mock_rule WHERE rule_api_id=#{apiId} and rule_enable <> 3 ORDER BY rule_enable, rule_update_date DESC")
    @Results(id = "apiRuleMap", value = {
        @Result(column = "rule_id", property = "id"),
        @Result(column = "rule_api_id", property = "apiId"),
        @Result(column = "rule_title", property = "title"),
        @Result(column = "rule_type", property = "type"),
        @Result(column = "rule_enable", property = "enable"),
        @Result(column = "rule_request_filter", property = "reqFilter", jdbcType =  JdbcType.VARCHAR, typeHandler = JSONArrayTypeHandler.class),
        @Result(column = "rule_response_body", property = "resBody", jdbcType =  JdbcType.VARCHAR, typeHandler = JSONObjectTypeHandler.class),
        @Result(column = "rule_response_code",property = "resCode"),
        @Result(column = "rule_shell", property = "shell"),

        @Result(column = "rule_create_user", property = "createUser"),
        @Result(column = "rule_create_date", property = "createDate"),
        @Result(column = "rule_update_user", property = "updateUser"),
        @Result(column = "rule_update_date", property = "updateDate")
    })
    List<QMockApiRuleEntity> getMockApiRuleLisByApiId(@Param("apiId") Long apiId);

}

同样Results标记中有一处 typeHandler = JSONArrayTypeHandler.class ,会同JSONArrayTypeHandler在下一篇进行扩有关于自定义类型的扩展知识讲解,这里先给出具体代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class JSONArrayTypeHandler extends BaseTypeHandler<JSONArray> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONArray parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, String.valueOf(parameter.toJSONString()));
    }

    // 转换处理部分
    @Override
    public JSONArray getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String sqlJson = rs.getString(columnName);
        if (null != sqlJson){
            return JSONObject.parseArray(sqlJson);
        }
        return null;
    }

    @Override
    public JSONArray getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String sqlJson = rs.getString(columnIndex);
        if (null != sqlJson){
            return JSONObject.parseArray(sqlJson);
        }
        return null;
    }

    @Override
    public JSONArray getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String sqlJson = cs.getString(columnIndex);
        if (null != sqlJson){
            return JSONObject.parseArray(sqlJson);
        }
        return null;
    }
}

业务逻辑

功能方法的使用在上一节中已经有具体的体现了,这里给大家看下完整的代码层级。

到此,有关规则的数据业务层的逻辑实现详细的展示完毕,如果你上一篇已经自主完成编码实现了,恭喜你,你学的很扎实。但如果没有也没关系跟着这篇看一遍,敲代一遍,再同上一篇好好捋一捋,将这个规则的请求调通,那也是很棒了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非典型性程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mock12-拦截器服务实现(三) 接口匹配逻辑
上两节我们学习了 HandlerInterceptor 和 WebMvcConfigurer 基础知识,接下我们就可以利用此模块进行拦截服务的逻辑实现了。在此之前我这边先给出一个本项目要实现的一个简化版逻辑处理图,大家可以根据此图先自己构思所要设计数据库表和代码块。
MegaQi
2023/12/28
2130
Mock12-拦截器服务实现(三) 接口匹配逻辑
Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理
1、mysql5.7开始支持json类型字段; 2、mybatis暂不支持json类型字段的处理,需要自己做处理
stys35
2020/06/22
19.4K3
Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
mybatis用于bean和mysql字段映射,针对字段类型为JSONObject和JSONArray方式使用
刘大猫
2024/11/03
1340
我的开发日记(一)
前些日子公司打算开发一个集成各种管理功能的大平台,让我负责测试相关服务的开发。首次重任,着实让我这阵子忙成了狗。上周终于立项完成了,本周正式进入开发阶段,大致需求如下:
FunTester
2020/06/18
7820
Mock15-扩展知识点-MyBatis自定义类型
当我们谈论MyBatis自定义类型处理器时,实际上在解决一个非常有趣且实用的问题:如何在我们的Java应用程序中处理数据库中的复杂数据类型。具体来说,我们将探讨如何使用MyBatis来处理一个特殊的场景—将Java对象中的JSONObject类型属性映射到数据库中的VARCHAR类型字段。
MegaQi
2024/01/23
2120
Mock15-扩展知识点-MyBatis自定义类型
我的开发日记(十)
最近开发基本都是在搬砖,补漏洞,今天正式部署到服务准备联调了,中间遇到了一些难点。
FunTester
2020/07/01
5070
mybatis 自定义转换器 ListTypeHandler
mybatis 自定义转换器 ListTypeHandler 实现存库 list->string
用户9131103
2023/07/17
8420
深入探索MySQL中JSON数据的查询、转换及springboot中的应用
MySQL版本引入了对JSON数据类型的支持,这为我们处理和存储非结构化数据提供了新的可能性。通过灵活利用MySQL的JSON函数,我们可以实现高效的查询和转换操作,提取有用的数据,并将其转换为有意义的格式。本文将深入探索MySQL中JSON数据的查询与转换技巧,帮助您更好地利用这一功能。
修己xj
2023/08/25
2.9K0
深入探索MySQL中JSON数据的查询、转换及springboot中的应用
MyBatis typeAliases & typeHandlers(3)
可以看到,在resultMap标签type属性直接使用别名user就可以匹配到类型”com.freecloud.plug.mybatis.entity.User“,极大的减少了全限定类名的书写。
兜兜毛毛
2021/04/14
8250
MyBatis typeAliases & typeHandlers(3)
自定义 mybatis 的 TypeHandler 处理 PostgreSQL 中 json 类型字段
1.定义一个 JsonTypeHandler 进行处理 package com.codingos.springboot.util; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.BaseTypeHandler; import org.apa
北漂的我
2019/05/29
5.7K0
扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
前言:介绍一个简单的MyBatis加解密方式,日常学习工作中提及这种方法的比较少,所以拿来说说,如果已经知道这种方法的忽略本文!
终码一生
2022/04/15
2K0
扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
mybatis返回两个字段数据_java接口接收json数据
在mybatis的xml中,常规无法直接进行映射,需要自己写一个TypeHandler,自定义一个JSONTypeHandlerPg类
全栈程序员站长
2022/10/03
9180
扔掉工具类!MyBatis 一个简单配置搞定加密、解密,不能太方便了~!
点击关注公众号,Java干货及时送达 来源:juejin.cn/post/6963811586184052767 前言:介绍一个简单的MyBatis加解密方式,日常学习工作中提及这种方法的比较少,所以拿来说说,如果已经知道这种方法的忽略本文! 一、背景 在我们数据库中有些时候会保存一些用户的敏感信息,比如:手机号、银行卡等信息,如果这些信息以明文的方式保存,那么是不安全的。 假如:黑客黑进了数据库,或者离职人员导出了数据,那么就可能导致这些敏感数据的泄漏。因此我们就需要找到一种方法来解决这个问题。 二、
Java技术栈
2022/08/25
1.2K0
扔掉工具类!MyBatis 一个简单配置搞定加密、解密,不能太方便了~!
MyBatis数据库字段映射Java枚举 顶
有时候我们需要将数据库的字段对Java的枚举类型进行映射,比如说我们有一个汽车配件类型的枚举
算法之名
2019/08/20
1.8K0
MyBatis数据库字段映射Java枚举
                                                                            顶
在gradle6.9环境中对Mybatis Generators中TypeHandler的使用
在进行mybatis开发的过程中,我们经常会遇到此类问题:如mysql的表中的日期为字符串,但是我们在java中希望按照Date类型进行操作。因此,我们需要用到mybatis中的typeHandler。 本文就是一个将数据库中 String类型存储的字段 createDate ,其格式为“yyyy-MM-ddHH:mm:ss”,通过TypeHandler转换为Date操作的实例。
冬天里的懒猫
2021/09/09
9580
在gradle6.9环境中对Mybatis Generators中TypeHandler的使用
扔掉工具类!MyBatis 一个简单配置搞定加密、解密,不能太方便了~!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
5850
扔掉工具类!MyBatis 一个简单配置搞定加密、解密,不能太方便了~!
mybatis-generator使用备忘
最近要做一个新的项目,项目涉及的业务还比较复杂,表相当多。项目使用的技术框架为SSM。于是决定使用mybatis-generator来生成DAO层大部分代码。使用的过程中遇到一些问题,这里小计一下。 实体对象属性为枚举 为了避免硬编码,希望生成的实体对象有的属性尽量使用枚举。 可以先定义一个枚举。 UserStatus.java public enum UserState implements CodeTypeEnum<UserState> { ENABLED((byte)0), DISAB
jeremyxu
2018/05/10
1.7K0
0基础学习Mybatis系列数据库操作框架——自定义类型处理器
我们有时候会在数据库中放入一个扩展字段,用于保存在表设计时尚未考虑到的、未来会加入的一些信息。这个字段我们一般使用字符串存储,格式是个Json。这样后续就可以很方便进行序列化和反序列化。 本文主要讲解如何自定义类型处理器,让Mybatis自动帮我们做序列化和反序列化。Json序列化工具我们采用fastjson库。 为了使用这个库,我们在Maven的pom.xml中加入如下片段
方亮
2024/05/24
1870
0基础学习Mybatis系列数据库操作框架——自定义类型处理器
MyBatis源码解析之基础模块—TypeHandler
上一章节我们一起分析了Mybatis的Plugin模块的源码。掌握了如何配置拦截器注解,如何自定义拦截器以及拦截器的执行过程。
todobugs
2020/10/20
1.2K0
MyBatis之TypeHandler
  在大学写web应用的时候经常会遇到这么个问题,当我要插入一条数据,某个数据是Date类型,数据库中却是VARCHAR类型,这个时候可能会傻乎乎的先把这个数据自己手动转换成String类型再插入到数据库中,其实大可不必。MyBatis为我们提供了更好的方法即是TypeHandler来应对Java和jdbc字段类型不匹配的情况。MyBatis中内置了不少的TypeHandler,如果我们想要自己自定义一个TypeHandler可以实现TypeHandler接口,也可以继承BaseTypeHandler类。下
用户1148394
2018/01/09
1.5K0
MyBatis之TypeHandler
推荐阅读
相关推荐
Mock12-拦截器服务实现(三) 接口匹配逻辑
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验