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

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

作者头像
MegaQi
发布2024-01-17 14:34:07
710
发布2024-01-17 14:34:07
举报

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

规则配置数据表

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

代码语言:javascript
复制
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
复制
@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
复制
@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
复制
@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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 规则配置数据表
  • 规则表操作
    • 实体类
      • 数据操作
        • 业务逻辑
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档