springboot快速写API,直接传sql作为参数

Posted Z-hhhhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot快速写API,直接传sql作为参数相关的知识,希望对你有一定的参考价值。

很久没写过接口了,很多都忘记了,找了找资料都是比较常见的方式,没有直接用sql做参数的。

因为业务用数据可能会改,所以写成直接传sql的方式,后期省去了改的活,一劳永逸

一、新建工程

以上内容也可以手动在pom里添加

二、配置

用到的pom如下

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

先写配置文件

spring.datasource.url=jdbc:mysql://xx.xx.xx.xx:xxxx/test?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
server.port=8001

三、代码部分

model层

1、SQLModel
public class SQLModel 
    private String sql;

    public String getSql() 
        return sql;
    

    public void setSql(String sql) 
        this.sql = sql;
    

2、ResultResponse
public class ResultResponse<T> 
    private List<T> data;

    public List<T> getData() 
        return data;
    

    public void setData(List<T> data) 
        this.data = data;
    

controller层

TestController
@RestController
@RequestMapping("/test")
public class TestController 
    @RequestMapping("/ping")
    public String ping() 
        System.out.println("123");
        return "pong";
    

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("/getSqlResult")
    public ResultResponse getSqlResult(@RequestBody SQLModel sqlModel) 
        String sql = sqlModel.getSql();
        List<Map<String, Object>> list =  jdbcTemplate.queryForList(sql);
        ResultResponse resultResponse = new ResultResponse();
        resultResponse.setData(list);
        return resultResponse;
    


四、测试

配置里写的端口是8001,

就可以访问了

localhost:8001

分别访问上面两个

localhost:8001/test

能看到页面有

123

说明正常了

最后一个就是重头戏了,直接传sql就行了

为了方便,用怕postman测试

用post方式,防止字符串超长

写在最后:
其实sql加密会比较好,但是这里没写,自己写的时候可以试一试,也不复杂,多个解密过程而已

以上是关于springboot快速写API,直接传sql作为参数的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法

嵌入式 SQL 直接与作为 API 调用

fiddler抓包-安装与快速上手

SpringBoot 快速整合Mybatis(去XML化+注解进阶)

SpringBoot系列之集成Scala开发API接口

Springboot系列Springboot接管所有Controller,magic-api源码阅读