Java - сделать простой вызов SQL - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение, в котором пользователь вводит некоторую строку SQL в поле ввода, и я хочу вернуть данные JSON для этой строки.

У меня есть строка, как мне получить данные и вернуть их?

Есть ли способ сделать это более безопасным и позволить пользователю выбирать вещи, а не обновлять / удалять / удалять?

@RequestMapping("/api")
@RestController
public class Controller {

    @GetMapping
    public List<Object> returnData(@RequestParam String query) {
       //return the data from que query
    }
}

Я использую JPA + Hibernate + Spring Boot

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете использовать org.springframework.jdbc.core.JdbcTemplate для выполнения простого sql. Просто создайте простой боб:

  @Bean
  public JdbcTemplate healthJdbcTemplate(DataSource dataSource) {
    return new JdbcTemplate(dataSource);
  }

Вы можете автоматически связать jdbcTemplate и выполнить простые SQL-запросы

@Autowired
private JdbcTemplate jdbcTemplate;

После этого вы можете использовать метод queryForList для получения необходимых данных. Например, если у вас есть таблица персон со следующими данными:

id  first_name last_name, add_info, company_id
1      fn1       ln1       info1        1
2      fn2       ln2       info2        1
3      fn3       ln3       info3        1
4      fn4       ln4       info4        1

И фирменный стол:

id company_name
1  test_company1

И вы используете следующий код для извлечения данных:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
public class Controller {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/api/test")
    List<Map<String, Object>> getData() {
        return jdbcTemplate.queryForList("Select * FROM public.persons p JOIN public.companies c" +
                " ON p.company_id = c.id");
    }
}

Результат будет

[{"id":1,"f_name":"fn1","l_name":"ln1","add_info":"info1","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn2","l_name":"ln2","add_info":"info2","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn3","l_name":"ln3","add_info":"info3","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn4","l_name":"ln4","add_info":"info4","company_id":1,"company_name":"test_company1"}]

Обновления на основе вопросов в комментариях:

javax.sql.DataSource - это bean-компонент, который автоматически настраивается пружиной (если вы не переопределите конфигурацию или не отключите ее). Этот bean-компонент необходим для JdbcTemplate, поскольку он содержит информацию о базе данных, в которой JdbcTemplate будет выполнять запросы. По умолчанию он использует следующие свойства из файла application.properties (или в случае ниже, application.yml). Например:

spring:
  datasource:
    username: someusername
    password: somepassword
    url: jdbc:postgresql://localhost:5432/dbname
    driver-class-name: org.postgresql.Driver
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...