JPA 自定义对象 postgresql数据库

23 篇文章 1 订阅
22 篇文章 10 订阅

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);

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),它支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。在使用Spring Boot中集成PostgreSQL并使用JPA对其进行操作时,你需要进行以下几个步骤: 1. 首先,在Spring Boot项目的配置文件(通常为application.properties或application.yml)中配置PostgreSQL的连接信息,包括URL、用户名、密码和驱动类名。 2. 接下来,你需要在项目的依赖中添加PostgreSQLJPA的相关依赖。在Maven项目中,你可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> ``` 如果你使用Gradle构建项目,则可以在build.gradle文件中添加以下依赖: ```groovy implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.postgresql:postgresql' ``` 3. 然后,你需要创建一个实体类来映射数据库中的表,可以使用JPA的注解来定义实体类和表之间的映射关系。例如,你可以创建一个User实体类来映射user表: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; // getters and setters } ``` 4. 接下来,你可以创建一个继承自JpaRepository的接口来定义数据库操作的方法。例如,你可以创建一个UserRepository接口: ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { // 可以在这里定义一些自定义查询方法 } ``` JpaRepository提供了一些常用的数据库操作方法,如保存、查询、删除等。 5. 最后,你可以在你的业务逻辑中使用UserRepository来进行数据库操作。例如,你可以在一个Service类中注入UserRepository,并调用其中的方法来进行用户数据的增删改查操作。 综上所述,要在Spring Boot中使用PostgreSQLJPA,你需要配置数据库连接信息,添加相关依赖,创建实体类和Repository接口,然后在业务逻辑中使用Repository进行数据库操作。这样就可以使用PostgreSQLJPA来进行数据持久化操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值