簡體   English   中英

如何在spring boot controller中執行sql語句?

[英]how to execute sql statements inside spring boot controller?

我想在spring boot controller類中執行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();
}

您可以在代碼中使用JdbcTemplate。

您在配置類中需要的bean是: -

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

對於在JEE應用程序中的表示層(控制器或視圖)執行任何SQL(執行任何持久性),這通常是架構上糟糕的設計。

最好的選擇是讓控制器使用服務層,當服務層調用持久層時:獲取,保存或更新數據。

無論如何,您可以使用Spring Data JDBC 就像是:

import org.springframework.jdbc.core.JdbcTemplate;

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

我可以給你一個小例子,我是如何使用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接口的接口。 帳戶對象是自制對象。 通過使用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;
  }
}  

有關如何使用彈簧數據的更多示例,我建議按照其網站上的快速入門指南進行操作。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM