【问题标题】:how to execute sql statements inside spring boot controller?如何在 Spring Boot 控制器中执行 sql 语句?
【发布时间】:2018-09-04 10:24:10
【问题描述】:

我想在我的 spring boot 控制器类中执行 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();
}

【问题讨论】:

  • 通过发布不起作用的代码来更清楚地解释
  • 首先,您不应该在控制器中执行 SQL 语句。相反,您应该创建一个实现 JPA 存储库接口的服务类。
  • 你完全跳过了service/dao层吗?这是不推荐的方法。
  • 这个语句是什么意思是数据库相关的,不与特定实体相关联。?您不想将此 uuid 用作实体的主键吗?
  • @wafaahegazy 是的,我不想把它保存为主键

标签: java mysql spring spring-boot uuid


【解决方案1】:

您可以在代码中使用 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;
}

【讨论】:

  • 已经试过了,得到 org.springframework.web.util.NestedServletException: Request processing failed;嵌套异常是 org.springframework.jdbc.BadSqlGrammarException: StatementCallback;错误的 SQL 语法 [SELECT UUID()];嵌套异常是 java.sql.SQLSyntaxErrorException: unexpected end of statement
  • 我尝试使用上面分享的相同代码,它非常适合我
  • 您的代码可能有问题,它适用于我“select UUID()”也适用于“SELECT UUID()”
  • 我已经更新了代码,你用的是mysql还是hsqldb?我认为 select uuid() 在这两种情况下都有效
  • 我正在使用 h2 db
【解决方案2】:

JEE applications 中的表示层(控制器或视图)上执行任何 SQL(执行任何持久性)通常在架构上是糟糕的设计。

最好的选择是让控制器使用服务层,当服务层调用持久层时:获取、保存或更新数据。

无论如何,您都可以使用Spring Data JDBC。比如:

import org.springframework.jdbc.core.JdbcTemplate;

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

【讨论】:

  • 之前绑定过,给我错误ie can not resolve method "query(java.lang.string)
  • Java 9 和 Spring 4 ?
  • java 8 spring boot 2
  • 然后只需检查您的应用配置,我认为缺少 Spring 方面或类似的东西。
  • 顺便说一句,如果你只是需要一个 UUID,你可以使用 Java UUID 类来生成。
猜你喜欢
  • 2021-05-02
  • 2022-11-06
  • 2018-06-19
  • 2018-03-21
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多