沐鸣娱乐


        摸鱼技巧-mybatis动态sql实现接口配置查询

        很多公司内部为了效率,在一些后台管理系统上开始使用低代码工具 。

        今天我们就讲下 如果通过mybatis的动态sql,简单实现一个接口配置查询功能 。技术栈 springboot 、mybatis、mysql

        (一)在mysql新增两张表。api_config 是配置 接口路径 和sql的关系的 。userinfo 是查询测试表(自己随意建立 我就不贴图了)。

        摸鱼技巧-mybatis动态sql实现接口配置查询

        (二)先写 api_config的查询代码,这里就是基本的 mybatis使用方法。mapper类 、service类、以及mapper xml文件

          @Servicepublic class ApiConfigService { @Autowired private ApiConfigMapper apiConfigMapper; public ApiConfig getApiConfig(String urlPath,String method){ return apiConfigMapper.getApiConfigByPath(urlPath,method); }

        @Mapperpublic interface ApiConfigMapper { ApiConfig getApiConfigByPath(@Param("urlPath") String urlPath, @Param("method") String method);}

        <mapper namespace="com.example.mapper.ApiConfigMapper"> <select id="getApiConfigByPath" resultType="com.example.entity.ApiConfig"> select * from api_config where url_path = #{urlPath} and method=#{method} </select></mapper>

        (三)cotroller 接收 url请求 。

        这里我们需要接收符合规则的所有请求 。通过 spring requestMapping 内地模糊匹配来实现 。如下@GetMapping("/get/*")

        1 、获取请求地址

        2、获取请求方法

        3、根据请求地址和请求方法 查找 对应的sql是什么。

        4 、将 请求参数 以及 对应的sql 放到 paramMap参数中。

        这里我先实现Get请求,post请求 大家可以自行去实现。

              @RestController@RequestMapping("/api")public class UserController { @Autowired private ApiService apiService; @Autowired private ApiConfigService apiConfigService; @Autowired private HttpServletRequest request; @GetMapping("/get/*") public Object getUser(@RequestParam(required = false) Map<String,Object> requestMap){ String requestPath = request.getServletPath(); String method = request.getMethod(); ApiConfig apiConfig = apiConfigService.getApiConfig(requestPath,method); ParamMap paramMap = new ParamMap(); paramMap.putAll(requestMap); paramMap.setSql(apiConfig.getSql()); return apiService.getResult(paramMap); }

        (四)apiService 比较简单 如下

        @Servicepublic class ApiService { @Autowired private ApiMapper apiMapper; public ResultMap getResult(ParamMap paramMap) { List<Map<String,Object>> list = apiMapper.selectList(paramMap); ResultMap resultMap = new ResultMap(); resultMap.put("data",list); return resultMap; }}        

        (五)这里是重点 、重点、重点 。我们来看 ApiMapper类 如何通过动态sql 来实现查询的。

        1 类里只有一个 方法 selectList 。返回 使用的 是 List<Map<String,Object>> 。

        其中Map<String,Object> 存的是 表中一条记录 的各个字段值 。

        List 就代表 查询出的多个记录。

        2 我们不写xml文件了。这里用了 SelectProvider注解类,注解类有两个参数

        type 代表 sql来源于哪个类 method 代表 类里的哪个方法。

        通过这种方式让mapper类获取执行的代码

             @Mapperpublic interface ApiMapper { @SelectProvider(type = SqlProvider.class,method = "provideSql") List<Map<String,Object>> selectList(ParamMap paramMap);}

        3 接下来看看 SqlProvider类 。非常简单 就是将 表里配置的sql返回一下。

        我给的例子就是 select * from userinfo where id=#{id}

         public class SqlProvider { public String provideSql(ParamMap paramMap){ return paramMap.getSql(); }}

        (六)启动程序后 我们看下请求效果。请求成功

        摸鱼技巧-mybatis动态sql实现接口配置查询

        最后,如果再开发一个页面前端配置,是不是 解放了我们后端小伙伴的双手 。当然高并发场景就不要这么玩了 。后台管理还是可以这么玩的。

        此时我们可以跟领导说这几个接口开发 后端需要3天 ,实际 30分钟整完 。剩下的时间是不是就可以摸鱼了 。

        摸鱼技巧-mybatis动态sql实现接口配置查询

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图