it-roy-ru.com

как выполнить операторы SQL внутри контроллера загрузки Spring?

Я хочу выполнить инструкцию sql внутри моего весеннего загрузочного контроллера класса без определения какого-либо метода в репозитории jpa. Утверждение, которое я хочу использовать: 

SELECT UUID();

Этот оператор связан с базой данных и не связан с конкретным объектом. 

Было бы хорошо, если бы кто-нибудь мог предоставить решение для выполнения вышеупомянутого утверждения через

  1. пружинный контроллер класса
  2. репозиторий jpa (если рекомендуется)

Обновление

контроллер:

@Autowired
JdbcTemplate jdbcTemplate;

@RequestMapping(value = "/UUID", method = RequestMethod.GET)
public ResponseEntity<String> getUUID() {
    String uuid = getUUID();
    return buildGuestResponse(uuid);
}

public String getUUID(){
    UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
    return uuid.toString();
}
5
user2083529

Вы можете использовать JdbcTemplate в своем коде.

Компонент, который вам понадобится в вашем классе конфигурации:

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

И код для запуска запроса:

@Autowired
private JdbcTemplate JdbcTemplate;

public String getUUID(){
    UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
    return uuid.toString();
}

или может быть так:

public UUID getUUID(){
    UUID uuid = (UUID)jdbcTemplate.queryForObject("select UUID()", UUID.class);
    return uuid;
}
4
kakabali

Как правило, это архитектурно плохой дизайн для выполнения любого SQL (сделать любое постоянство) на уровне представления (контроллер или представление) в приложениях JEE

Наилучшим вариантом является заставить контроллер использовать сервисный уровень, когда сервисный уровень вызывает постоянный уровень для: получения, сохранения или обновления данных. 

В любом случае вы можете использовать Spring Data JDBC . Что-то вроде:

import org.springframework.jdbc.core.JdbcTemplate;

....
 UUID uuid = (UUID)jdbcTemplate.query("SELECT UUID()", UUID.class);
....
2
Victor Gubin

Я мог бы привести небольшой пример того, как я выполнял это в рамках Spring с использованием данных Spring.

Класс контроллера:

@RestController
@RequestMapping("api/account")
public class AccountController {
  private AccountService accountService;

  @RequestMapping(
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE,
        path = "{id}"
  )
  public ResponseEntity getAccountId(@PathVariable("id") UUID id) {
    try {
        Account ac = accountService.findOne(id);
        return new ResponseEntity(ac, HttpStatus.OK);
    } catch (Exception ex) {
        return new ResponseEntity("Account not found.", HttpStatus.NOT_FOUND);
    }
}

В этом небольшом примере у меня есть AccountController и AccountService, который является интерфейсом, расширяющим интерфейс JpaRepository. Объект account - это самодельный объект. Используя интерфейс JpaRepository, вам не нужно самостоятельно писать операторы SQL. Вместо этого вам нужно предоставить действительный объект модели и идентификатор (в моем случае UUID).

Вот небольшой пример объекта Account:

@Entity
public class Account {

  private @Id @GeneratedValue(generator = "uuid2") UUID id;
  private String firstName, lastName, description;

  private Account() {}

  public Account(String firstName, String lastName, String description) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.description = description;
  }
}  

Для большего количества примеров того, как работать с пружинными данными, я рекомендую следовать краткому руководству на их сайте .

Надеюсь, поможет!

1
Saltz