测试开发【Mock平台】14基础:拦截器服务实现(五) 规则查询代码

【Mock平台】为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台,希望作为一个实战项目对各位的测试开发学习之路有帮助,关注公众号发送“mock”获取github项目源码地址,大奇一个专注测试技术干货原创与分享的家伙。

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

规则配置数据表

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

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做处理。

@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查询所属配置规则列表。

@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对实体类和数据表实际字段名的映射。

@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在下一篇进行扩有关于自定义类型的扩展知识讲解,这里先给出具体代码:

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;
    }
}

业务逻辑

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

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

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mega Qi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值