[英]how to execute sql statements inside spring boot controller?
我想在spring boot controller類中執行sql語句,而不是在jpa存儲庫中定義任何方法。 我想要使用的聲明是
SELECT UUID();
此語句與數據庫相關,並且與特定實體無關。
如果任何人都能通過提供上述語句的執行解決方案,那將是很好的
更新
控制器:
@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.