首页 > 数据库 >使用Spring Data JPA,您可以通过定义接口,面来避免Object[]以更优雅的格式返回数据,sql的返回值和接口的属性名一致。jap会根据sql返回值映射到接口对应属性。

使用Spring Data JPA,您可以通过定义接口,面来避免Object[]以更优雅的格式返回数据,sql的返回值和接口的属性名一致。jap会根据sql返回值映射到接口对应属性。

时间:2023-11-03 17:57:28浏览次数:41  
标签:Code String JPA 接口 start sql 返回值 SELECT

使用Spring Data JPA,您可以通过定义接口,面来避免Object[]以更优雅的格式返回数据,sql的返回值和接口的属性名一致。jap会根据sql返回值映射到接口对应属性。

cas*_*lin 6

根据定义,JPA将返回Object[]查询返回带有投影的列表的列表,即来自实体(或多个实体)的一组字段.

使用Spring Data JPA,您可以通过定义如下界面来避免Object[]更优雅的格式返回数据:

public interface MainEntityProjection {
    String getStart();
    String getFinish();
    String getForename();
    String getSurname();
}
Run Code Online (Sandbox Code Playgroud)

并更改您的查询方法以返回上面定义的接口:

@Query("SELECT e.start, e.finish, e.forename, e.surname " +
       "FROM MainEntity e " +
       "WHERE e.volunteerId = :id AND e.areaId > 0 AND e.isAssignment = true " +
       "ORDER BY e.start")
List<MainEntityProjection> findAssignments(@Param("id") int volunteerId);
Run Code Online (Sandbox Code Playgroud)

Spring Data JPA文档中描述了这种方法.


除了Spring Data JPA之外,JPA本身SELECT NEW使用公共构造函数处理它.您可以将类定义如下:

public class MainEntityProjection {
    private String start;
    private String finish;
    private String forename;
    private String surname;
    public MainEntityProjection(String start, String finish,
                                String forename, String surname) {
        this.start = start;   
        this.finish = finish;
        this.forename = forename;
        this.surname = surname;
    }
    // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

然后你的查询将是:

SELECT NEW org.example.MainEntityProjection(e.start, e.finish, e.forename, e.surname)
FROM MainEntity e
WHERE e.volunteerId = :id AND e.areaId > 0 AND e.isAssignment = true
ORDER BY e.start
Run Code Online (Sandbox Code Playgroud)

上述查询也可以与Spring Data JPA一起使用(您的方法将返回一个列表MainEntityProjection).

检查JSR 338,定义JPA 2.1的文档,说明使用SELECT NEW和构造函数表达式:

4.8.2 SELECT子句中的构造函数表达式

可以在SELECT列表中使用构造函数来返回Java类的实例.指定的类不需要是实体或映射到数据库.构造函数名称必须是完全限定的.

如果在SELECT NEW子句中将实体类名指定为构造函数名称,则生成的实体实例将处于新状态或分离状态,具体取决于是否为构造对象检索主键.

如果作为构造函数参数的single_valued_pa​​th_expressionidentification_variable引用实体,则该single_valued_pa​​th_expressionidentification_variable引用的结果实体实例将处于托管状态.

例如,

SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count)
FROM Customer c JOIN c.orders o
WHERE o.count > 100
Run Code Online (Sandbox Code Playgroud)


原文链接:https://qa.1r1g.com/sf/ask/3033208321/

标签:Code,String,JPA,接口,start,sql,返回值,SELECT
From: https://www.cnblogs.com/sunny3158/p/17808096.html

相关文章

  • Mac安装mysql8.0.35
    安装步骤(详细步骤)打开官网https://dev.mysql.com/downloads/mysql/选择自己mac需求的版本以及适合自己mac的版本#查看mac型号架构命令#先commond+空格搜索terminal回车进入终端uname-a先双击打开dmg文件,然后会跳转到pkg里面,双击即可一路下一步即可选......
  • Redhat8.2二进制安装mysql8.0,启动报错
    报错信息:bin/mysql:errorwhileloadingsharedlibraries:libtinfo.so.5:cannotopensharedobjectfile:Nosuchfileordirectory解决办法:ll/usr/lib64/libtinfo.so.6[root@zabbixservermysql]#ln-s/usr/lib64/libtinfo.so.6.2/usr/lib64/libtinfo.so.5[root@zab......
  • Mysql判断表是否存在的思路
    $checkTableExist="SELECTTABLE_NAMEas'table_name'FROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA='数据库名称'andTABLE_NAMElike'%这里写自己的表名%'";//上面的写法是模糊查询,也可以写成=$tables=Db::query($checkTableExist);$tableDat......
  • Ubuntu 20↑ 安装postgresql,并且开远程访问。
    postgresql-16安装并且开放外网访问按照官方的教程,我已经将pg官方的地址换成了清华开源镜像站的地址,这样下载的速度更快。安装postgresql下载的源sudosh-c'echo"debhttps://mirrors-i.tuna.tsinghua.edu.cn/postgresql/repos/apt/$(lsb_release-cs)-pgdgmain">/et......
  • MySQL使用函数、存储过程实现:向数据表快速插入大量测试数据
    实现过程创建表CREATETABLE`user`( `id`INT(11)NOTNULLAUTO_INCREMENT, `name`VARCHAR(20)DEFAULTNULL, `age`INT(3)DEFAULTNULL, `pwd`VARCHAR(20)DEFAULTNULL, `address`VARCHAR(30)DEFAULTNULL, PRIMARYKEY(`id`))ENGINE=INNODBAUTO_INCREMENT=......
  • Linux环境Prometheus接入(三、MySQL监控接入mysqld_exporter)
    环境CentOS7.9安装1、命令下载wgethttps://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gztar-zxfmysqld_exporter-0.15.0.linux-amd64.tar.gzmvmysqld_exporter-0.15.0.linux-amd64.tar.gz/home/mysq......
  • 如何使用商品详情API接口获取商品数据:一篇详尽的论述
    一、引言商品详情API接口是一种用于获取商品详细信息的应用程序接口。通过调用该接口,我们可以获取商品的名称、价格、描述、图片以及其他相关属性。对于电商平台、价格比较网站、数据分析等应用场景来说,商品详情API接口提供了便捷的数据获取方式。本文将详细介绍如何使用商品详情AP......
  • 如何使用商品详情API接口来获取想要的商品数据?
    在这篇文章中,我将详细介绍如何使用商品详情API接口来获取想要的商品数据。首先,我们需要了解API接口的基本概念和使用方法。然后,我们将探讨如何通过API接口获取商品数据,并给出示例代码。最后,我们将讨论如何优化API接口的使用,以提高获取商品数据的效率。一、API接口的基本概念API接口......
  • rpm install MySQL
    yumremovemysql-libs按照依赖关系依次安装rpm包,依赖关系依次为common→libs→client→server。使用命令rpm-ivh{-file-name}进行安装操作。[root@node01mysql]#rpm-ivhmysql-community-common-5.7.36-1.el7.x86_64.rpmwarning:mysql-community-common-5.7.36-1.el......
  • Mysql 逻辑语句
    1、第一种写法selectid,casewhenp_idisnullthen"Root"whenidnotin(selectdistinctp_idfromTreewherep_idisnotnull)then"Leaf"else"Inner"endastype//为该列起别名fromTree 2、第二种写法(case后面有表达式;值1、值2......