spring boot 使用类建模 MySQL 原生查询结果,无需创建表实体

2024-01-27

正如标题所示,我的存储库中有一个本机 SQL 查询,如下所示

@Repository
public interface BesoinRepository extends CrudRepository<Statistic, Long>{

    @Query(value="SELECT etat_besoin AS 'state',COUNT(DISTINCT id) AS 'number' FROM besoin WHERE YEAR(date_creation)=:year GROUP BY etat_besoin ",nativeQuery=true)
    List<Object> getStatistic(@Param("year") int year); 
}

班级统计

package fr.solinum.management.model;
public class Statistic {
    private String state;
    private int number;
    
    public String getState() {
        return state;
    }
    
    public int getNumber() {
        return number;
    }
}

这工作正常,但我想要的返回类型getStatistic to be List<Statistic>并且没有在我的数据库中创建表统计,因为我不需要它。换句话说,我只想从数据库中读取并将结果作为类返回。那么模型、存储库或控制器中有哪些变化,或者解决我的问题的最佳方法是什么?请注意,我如下修改了我的模型类来解决这个问题,但我不认为这是最佳或好的方法。

package fr.solinum.management.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "besoin")
public class Statistic {
    @Id
    private int id;
    private String state;
    private int number;
    
    public String getState() {
        return state;
    }
    
    public int getNumber() {
        return number;
    }
}

我可以想到三种方法:

  1. 使用数据库视图。

这样,您就可以将实体像任何其他表一样映射到视图。您可以毫无问题地使用存储库,并且无需创建不同的表。

  1. 将您的列表映射到类中并从服务/DAO 访问此数据。

这是更加劳动密集型的,并且可能不“适合”您的代码的其余部分。您可以使用另一个类,而不是直接使用存储库。此类将查询对象并映射它们,然后将它们传递到请求它们的控制器或服务。这真的就像做 JPA 的工作一样。

以下面的代码为例:

@Component
public class StatisticDAO {
    
    @Autowired
    private BesoinRepository besoinRepository;

    public List<Statistic> getStatistic(int year) {
        List<Statistic> result = new ArrayList<>();
        List<Object[]> temp = besoinRepository.getStatistic(year);
        temp.stream().forEach(data -> result.add(build(data)));
        return result;
    }
    
    private Statistic build(Object[] data) {
        return new Statistic(String.valueOf(data[0]), (Integer)data[1]);
    }

}

您需要将列表的类型更改为 Object[] 并检查 JPA 返回属性的顺序。

  1. Use 基于界面的投影 https://www.baeldung.com/spring-data-jpa-projections.

我推荐方法 1 和 3,但这取决于您以及更适合您的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring boot 使用类建模 MySQL 原生查询结果,无需创建表实体 的相关文章

随机推荐

  • Javascript toFixed 不四舍五入

    我正在使用 javascript 绑定到一些复选框 并且toFixed 2 没有四舍五入 有什么想法为什么不四舍五入吗 例如 如果数字是859 385它只是显示859 38代替859 39 我还读到toFixed可以根据您使用的浏览器进行不
  • 消息中的换行符

    使用Google Apps脚本 如何在变量中换行以发送邮件 换行符在msgBox Browser msgBox line 1 n line 2 请注意 您需要使用额外的反斜杠转义 n
  • React Native 应用程序崩溃,没有任何错误日志

    React Native 应用程序崩溃 没有任何错误日志 没有输出 react native log android 终端 没有出现错误的红屏 Android 模拟器只是崩溃 尝试使用 Expo 运行 再次崩溃 没有错误 工作时发生Text
  • 滚动到 UWP 的 ListView 中的新项目

    我正在创建一个带有包含消息的 ListView 的聊天应用程序 当发送 接收新消息时 ListView 应滚动到新消息 我正在使用 MVVM 所以 ListView 看起来像
  • ASP.NET 正则表达式验证器(密码强度)

    我有一个具有以下表达式的验证控件 d 2 w 2 W 1 8 这是一个至少包含以下内容的密码2 digits 2 个字母字符 1 个非字母数字 and 最少 8 个字符 不幸的是 这似乎不兼容跨浏览器 此验证在 Firefox 中完美运行
  • 在 HPC 集群上使用 python 代码 (mpi4py) 提交作业

    我正在工作带有 MPI 的 python 代码 mpi4py 我想在 HPC 集群的队列中跨多个节点 每个节点有 16 个处理器 实现我的代码 我的代码结构如下 from mpi4py import MPI comm MPI COMM WO
  • 是否有与 SQL Profiler 等效的 IBM Iseries/DB2?

    主题说明了一切 希望捕获提交给 DB2 的 sql 查看 Iseries SQL 退出点 它允许您记录任何提交的 SQL 唯一的问题是您必须编写自己的程序来进行日志记录 http publib boulder ibm com infocen
  • Ant 继承 Maven 属性

    我正在考虑将 Ant Ivy 项目转换为 Ant Maven Ant Tasks 我不想单独使用 Maven 因为我需要对构建过程进行更多控制 有没有办法让Ant build xml 文件继承pom xml 文件中设置的属性 我一直在创建一
  • Python cv2 中的皮肤检测和背景扣除

    在过去的几天里 我一直在使用 OpenCV Python 开发手势识别程序 理想情况下 我希望拥有一个如图所示的系统这个视频 https youtu be xML2S6bvMwI list PLtszSfeV ZqjcPArVX1PU68V
  • 默认的 WCF 绑定是什么?

    我已经挣扎了几天了这个问题 https stackoverflow com questions 6186663 cant send wcf service request as soapxml 在这个过程中学到了很多关于绑定的东西 不过 有
  • 如何浏览特定版本的Android源代码?

    我知道android源代码保存在这里 https android googlesource com https android googlesource com 但我看不到任何浏览旧版本代码的方法 我会如何看待 比如说 dalvik lib
  • SubGit:如何排除分支?

    我正在测试 SubGit 作为从 SVN 迁移到 Git 的一种方式 我想做的是能够在 git 存储库中创建所有用户都可以使用的远程分支does not同步回 SVN 我只希望 SubGit 跟踪 master 分支并将其同步回 SVN 以
  • 如何使用java获取文件到文件夹的相对路径[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中从两个绝对路径 或 URL 构造相对路径 https stackoverflow com questions 204784 how to construct a relative
  • C 中“隐式声明函数”警告有何含义?

    正如问题所述 隐式函数声明 警告究竟意味着什么 我们刚刚调高了 gcc 上的警告标志 发现了很多这些警告的实例 我很好奇在修复它们之前这可能会导致什么类型的问题 另外 为什么这是一个警告而不是错误 gcc 如何能够成功链接这个可执行文件 正
  • 当推送到达时将 cordova 应用程序带到前台

    我已经启动并运行了应用程序 推送通知工作正常 我需要当推送到达时 将应用程序带到前台 在 Android 上 所以 我发现的是这段代码 Intent toLaunch new Intent getApplicationContext Mai
  • BufferedOutputStream 的用途是什么?

    我想知道 BufferedOutputStream 的目的 使用它时的性能增益 这是来自BufferedOutputStream 的 API http download oracle com javase 6 docs api java i
  • 使用 Excel VBA 将 Skype 消息发送到群聊

    我正在尝试使用 Excel VBA 发送 Skype 消息 我发现了这段代码 Sub Test Dim aSkype As SKYPE4COMLib Skype Set aSkype New SKYPE4COMLib Skype Dim o
  • 有没有一种方法可以在 Windows 上安装 Haskell,而无需安装? (复制+粘贴)

    我正在学校提供的计算机上编程 我需要一个不进行安装的 Haskell 设置 我可以将其放在闪存驱动器上并复制到 C 驱动器 或者只是从闪存驱动器使用 我已经启动并运行了 Eclipse 因此如果我可以在 Eclipse 上获取它 而不会对
  • 无论如何,有没有办法在 golang/gin 中关闭客户端请求?

    Using gin https github com gin gonic gin框架 是否有办法通知客户端关闭请求连接 然后服务器处理程序可以执行任何后台作业而不让客户端等待连接 func Test c gin Context c Stri
  • spring boot 使用类建模 MySQL 原生查询结果,无需创建表实体

    正如标题所示 我的存储库中有一个本机 SQL 查询 如下所示 Repository public interface BesoinRepository extends CrudRepository