V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
haochih
V2EX  ›  问与答

spring data jpa 使用 native query 在动态查询参数加持下进行分页查询返回自定义对象?

  •  
  •   haochih · 2019-08-22 23:46:25 +08:00 · 6293 次点击
    这是一个创建于 1951 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 spring data jpa 进行一个复杂 sql 的分页查询,根据实际代码,有几点硬性要求:

    • 因为 sql 本身有点复杂,所以使用考虑使用 native query,也就是直接写原生 sql 语句的方式
    • 分页搜索条件使用动态查询参数,动态参数的意思是如果某个字段有值,该字段和对应值才会出现在 sql 条件中
    • 返回自定义对象

    请教下满足上述条件的分页查询使用 spring data jpa 怎么写,谢谢大家。

    4 条回复    2019-08-23 14:15:37 +08:00
    caotian
        1
    caotian  
       2019-08-23 09:20:54 +08:00
    @Query 应该不好实现这个, 要么试试 entityManager.createNativeQuery 这种原生 sql 查询, 要么根据参数动态生成 specification 查询
    BCy66drFCvk1Ou87
        2
    BCy66drFCvk1Ou87  
       2019-08-23 09:59:11 +08:00
    spring data jpa 可以传入一个 Pageable 做分页,但只有几个简单的属性设置,不适合做复杂的分页查询
    nnnToTnnn
        3
    nnnToTnnn  
       2019-08-23 14:10:33 +08:00
    ```java
    public interface UserRepository extends JpaRepository<User, Long> {

    @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
    Page<User> findByLastname(String lastname, Pageable pageable);
    }
    ```

    例子如下,话说为啥要使用 nativeQuery ? 其实用 hql 可以完全替代 sql
    nnnToTnnn
        4
    nnnToTnnn  
       2019-08-23 14:15:37 +08:00
    动态参数 =。= 好吧这个没注意,如果是动态参数的话,可以使用 SpEL 表达式来动态修改注解的值
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.