java - 用单个 SQL 语句填充一个包含另一个 pojo 的数组列表的 pojo,并正确迭代结果集

标签 java mysql sql gson pojo

在我的项目中,我有这个 POJO 类:

CourseBean.java:

@Expose
private Integer id;
@Expose
private String title = "";
@Expose
private String description = "";
@Expose
ArrayList<SubjectBean> alSubjects = new ArrayList();

它包含类(class)表的列和一个数组列表,其中另一个 pojo 代表本类(class)的主题。

为了填充这个pojo,我使用的过程如下:

  1. 我做了两个SQL语句:第一个通过ID获取类(class), 第二个是让所有科目都由同一门类(class)过滤 身份证号。
  2. 现在为了填充 pjo,我有一个填充方法来迭代第一个结果集和内部 迭代第二个

可以优化该过程吗?也许用一个 SQL 语句?。

----------------------------------编辑------------------------ ------------------------

我将使用 @Patrick Piatkowski 建议的声明

SELECT * FROM Course
JOIN Subject
ON Course.id = Subject.course_id
WHERE /* Your filters here */

但是现在这让我想到了另一个问题。当我迭代结果集时,类(class)的列在每一行中都是相同的。

this.setId(oResultSetCourse.getInt("id")); this.setTitle(oResultSetCourse.getString("title")); this.setDescription(oResultSetCourse.getString("description"));

这些应该只填充一次,同时主题的pojo应该在每次迭代时填充

处理这个问题的最佳方法是什么?

最佳答案

您可以使用联接:

SELECT * FROM Course
JOIN Subject
ON Course.id = Subject.course_id
WHERE /* Your filters here */

或者另一种选择

SELECT * FROM Subject
WHERE course_id IN 
    (SELECT course_id FROM Course
    WHERE /* Your filters here */)

第二种方法的优点是您仅从主题中获取列,同时还可以使用第一个语句从类(class)中获取列。

关于java - 用单个 SQL 语句填充一个包含另一个 pojo 的数组列表的 pojo,并正确迭代结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099009/

相关文章:

Java 1.5 使用线条和角度绘制形状的问题

mysql - 如何在mysql事件调度程序中运行两个更新查询?

java - GWT:当新版本可用时,如何强制客户端重新下载整个应用程序?

java按顺序播放声音

php - PDO:交易不回滚?

php - "Call to a member function fetch_row() on a non-object"尽管有错误处理

sql - IF..ELSE block 不工作 SQL

mysql - Ott 平台上的用户保留

java - 如何修改hibernate生成的SQL查询?

c# - Java 与 C# - ActionListener 和事件订阅