码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringDataJPA-@Query


    SpringDataJpa

    • @Query注解
      • @Query注解里使用原生sql动态查询,获取分组统计后时间最新的数据
      • 原生sql分页查询
        • 第1种 /* #pageable# */ ,这个参数必须要有
        • 第2种 直接用分页参数Pageable
      • JPQL查询

    @Query注解

    使用@Query注解自定义查询

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @QueryAnnotation
    @Documented
    public @interface Query {
        String value() default "";//sql 或者JPQL
    	//指定count的查询语句,不指定会根据query自动生成
        String countQuery() default "";
    	//指定使用什么字段来count()
        String countProjection() default "";
    	//标记是否用原生sql
        boolean nativeQuery() default false;
    	//指定一个query的名字,必须唯一
        String name() default "";
    	//指定一个count的query的名字,必须唯一
        String countName() default "";
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    @Query注解里使用原生sql动态查询,获取分组统计后时间最新的数据

    需求:联表查询,并且根据idj进行分组统计,并获取时间最新的一条数据,传入的参数有的肯为空
    解决:
    1.对时间使用MAX函数,分组后自然就会获取时间最新的记录
    2.使用if函数过滤参数为null的情况

    @Query(nativeQuery = true, value = "SELECT b.id," +
                "b.title," +
                "SUM(a.total_count) AS totalCount," +
                "SUM(a.negative_count) AS negativeCount," +
                "b.start_time,b.endtime," +
                "a.test_count AS testCount,MAX(a.analysis_date), " +
                " FROM result a ,config b " +
                " WHERE a.id=b.id AND b.id=?1 " +
                //" AND a.analysis_date BETWEEN ?2 AND ?3 AND a.code=?4 AND a.key=?5 " +
                " AND  if(?2 is null,1=1,a.analysis_date>=?2 ) AND a.analysis_date<=?3 AND a.code=?4 AND a.key=?5 " +
                " GROUP BY b.id")
        List<Map<String, Object>> search(@Param("id") Long id, @Param("start") String start, @Param("end") String end, @Param("code") String code, @Param("key") String key);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    原生sql分页查询

    返回整个表字段时才能使用表的实体来接收,自定义返回哪些字段时可以用Map或者Object[]来接收

    第1种 /* #pageable# */ ,这个参数必须要有

    这个方式分页有些问题

    @Query(nativeQuery = true,
        value = "SELECT * FROM works a WHERE if(?1 IS NULL,1=1,a.id=?1) AND a.delete_flag=0 /* #pageable# */ ",
        countQuery = "select count(*) from trsom_collected_works a WHERE if(?1 IS NULL,1=1,a.product_id=?1) AND a.delete_flag=0")
        
    
    • 1
    • 2
    • 3
    • 4

    第2种 直接用分页参数Pageable

     @Query(nativeQuery = true,value = "SELECT * FROM works a WHERE if(?1 IS NULL,1=1,a.id=?1) AND a.deleted=0")
        Page<WorksEntity> pageByTest1(@Param("id") Long id, Pageable pageable);
       或者使用Page<Map<String,Object>>来接收
       Page<Map<String,Object>> pageByTest2(@Param("id") Long id, Pageable pageable);
        
    
    • 1
    • 2
    • 3
    • 4
    • 5

    JPQL查询

    1. 使用JPQL直接操作实体写sql
    2. 可以直接使用分页参数 Pageable进行分页查询
     @Query(value = "select u from WorksEntity u where u.id=?1 and u.deleted=0")
     @Query(value = "select u from WorksEntity u where u.id=:id and u.deleted=0")
        Page<WorksEntity> pageById(@Param("id") Long id, Pageable pageable);
    
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    【Spring Cloud】新闻头条微服务项目:实时创建ES索引并引入MongoDB实现搜索历史记录及关键词联想
    【框架】VUE:路由配置(Router)
    第二十一章 轮播图
    鸿蒙实战项目开发:【短信服务】
    PiL测试实战(上)| 模型生成代码的单元级PiL测试
    Flink从入门到放弃—Stream API—Join实现(即多流操作)
    知名无人驾驶公司:文远知行内推
    面试官:实战中用过CountDownLatch吗?详细说一说,我:啊这
    论文笔记:DEPTS: Deep Expansion Learning for Periodic Time Series Forecasting
    [SWPUCTF 2021 新生赛]简简单单的逻辑-- 算法逆向
  • 原文地址:https://blog.csdn.net/qq_40605018/article/details/126366694
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号