JPA 自定义对象 postgresql数据库

本文介绍如何使用JPA进行复杂查询,包括使用原生SQL查询、HQL查询以及自定义实体映射,涵盖avg、min、max等聚合函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、返回值为List<Object[]>,由于我们之前说过Jpa无法自动完成查询结果到自定义实体的映射,所以我们要使用改对象接收。

nativeQuery=true,属性的设置,是表明该方法中的sql以数据库的sql语句格式对待。

 //查询某个tag在某段时间内的avg 、min 、 max 、 sum 、 count 等
    @Query(value = "SELECT  tag,round(cast(avg(value) as decimal),2) as value ,to_char(time1,'yyyy-MM-dd hh24:MI:ss') as time1" +
            " FROM user where tag =?1 and " +
            " time1 between ?2 and ?3 group by time1 ,tag " ,nativeQuery = true)
    List<Object[]> findTag(String tag , Timestamp startTime , Timestamp endTime );

controller  类中

    @RequestMapping(value = "/selectTableTag/one")
    public List<Object[]> findByMetrics(@RequestParam("tag")String tag, @RequestParam("startTime") Timestamp startTime,
                                                           @RequestParam("endTime") Timestamp endTime){
        return metricsRepository.findTag(tag ,startTime ,endTime);
    }

postman 测试结果

2、查询全部信息

①、带SQL语句

@Query(value = "SELECT  tag,round(cast(avg(value) as decimal),2) as value ," +
                  "to_char(time1,'yyyy-MM-dd hh24:MI:ss') as time1,to_char(time2,'yyyy-MM-dd hh24:MI:ss') as time2" +
            " FROM 表名 where tag =?1 and time1 between ?2 and ?3 group by time1,tag,time2",nativeQuery = true)
    List<xxxEntity> findTag(String tag , Timestamp startTime , Timestamp endTime );

②、jpa 语法  (建议不知道jpa 语法的区查一下,这个是jpa命名查询规则)

 List<MetricsEntity> findByTagAndSourceTimeBetween(String tag , Timestamp startTime , Timestamp endTime);

3、只查询几个字段

public interface MetricsRepository extends JpaRepository<MetricsEntity,Timestamp>, 
   JpaSpecificationExecutor<MetricsEntity>{ }

实体类

自定义 model 类 【只从这个表中查询字段】,这个sourceTime 时间我自定义的是Date类型的,而我的数据库表里是时间戳

 

这个时候使用hql语句,注意是HQL语句,不是SQL语句了,nativeQuery = false

public interface xxxRepository extends Repository<yyyyEntity, Timestamp> {

    //查询 yyyyEntity 这张表 在某段时间之内的tag的全部信息
    @Query(value = "select new com.yyyy.zzzzSummary(m.sourceTime, m.tag ,m.value) " +
            "FROM yyyyEntity m where m.tag =?1 and m.sourceTime between ?2 and ?3 order by m.sourceTime asc")
    List<zzzzSummary> find(String tag, Timestamp startTime, Timestamp endTime);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值