【问题标题】:What is the runtime for Repository's default "findById" function in Spring Boot?Spring Boot 中 Repository 的默认“findById”函数的运行时是什么?
【发布时间】:2020-06-08 16:24:17
【问题描述】:

对于简单的@PutMapping(见下文),它是否采用订单 ID 并在整个订单表中查找特定订单?还是直接得到那个特定的订单?

orderRepository 继承自 JpaRepository;数据库是 MySQL

//Update a order:
    @PutMapping("/orders/{id}")
    public Order updateOrder(@PathVariable(value = "id") Long orderId, @Valid @RequestBody Order orderDetails) throws OrderNotFoundException {
        Order order = orderRepository.findById(orderId).orElseThrow(() -> new OrderNotFoundException(orderId));
        order.setMerchant(orderDetails.getMerchant());
        order.setStore(orderDetails.getStore());
        Order updatedOrder = orderRepository.save(order);
        return updatedOrder;
    }

【问题讨论】:

  • Log the generated query - 查询是否使用了表的主键?
  • 我想您需要查看 SQL 查询的运行方式。在任何情况下,您都可以从数据库中查找订单表以获取该特定订单行

标签: java mysql spring-boot jpa repository


【解决方案1】:

您可以通过将以下行添加到属性 (application.properties) 文件中来查看发生的 sql 查询:

spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true

findById hibernate查询形成的一行如下:

select order0_.id as id1_0_0_, order0_.name as name2_0_0_ from app_order order0_ where order0_.id=?

id 字段在订单表中作为 where 条件进行搜索。在WHERE 子句中,您可以指定具有一个或多个条件的搜索条件(逻辑表达式)。 WHERE 子句中谓词为 True 的所有行都会受到影响(或返回)

您可以阅读这些文章作为建议: SQL WHERE 子句是here

Spring Data JPA 核心概念是here

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2020-03-30
    相关资源
    最近更新 更多