用单个 SQL 句子填充包含另一个 pojo 的数组列表的 pojo 并正确迭代结果集
Fill a pojo that contains an arraylist of another pojo with a single SQL sentence and properly iterate resultset
在我的项目中我有这个 POJO class:
CourseBean.java:
@Expose
private Integer id;
@Expose
private String title = "";
@Expose
private String description = "";
@Expose
ArrayList<SubjectBean> alSubjects = new ArrayList();
它包含课程的列 table 和一个数组列表,其中包含代表本课程主题的其他 pojo。
要填充此 pojo,我使用的过程如下:
- 我造了两句SQL:第一个通过ID获取课程和
第二个让所有科目都被同一门课程过滤
身份证.
- 现在填充 pjo 我有一个填充方法来迭代第一个结果集和内部
迭代第二个
可以优化那个程序吗?也许只有一个 SQL 句子?
--------------------------------编辑------------ --------------------------
我将使用@Patrick Piatkowski 提出的声明
SELECT * FROM Course
JOIN Subject
ON Course.id = Subject.course_id
WHERE /* Your filters here */
但是现在这让我想到了另一个问题。当我迭代结果集时,课程的列在每一行中都是相同的。
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 */)
第二种方法的优点是您仅从 Subject 获取列,同时您还使用第一个语句从 Course 获取列。
在我的项目中我有这个 POJO class:
CourseBean.java:
@Expose
private Integer id;
@Expose
private String title = "";
@Expose
private String description = "";
@Expose
ArrayList<SubjectBean> alSubjects = new ArrayList();
它包含课程的列 table 和一个数组列表,其中包含代表本课程主题的其他 pojo。
要填充此 pojo,我使用的过程如下:
- 我造了两句SQL:第一个通过ID获取课程和 第二个让所有科目都被同一门课程过滤 身份证.
- 现在填充 pjo 我有一个填充方法来迭代第一个结果集和内部 迭代第二个
可以优化那个程序吗?也许只有一个 SQL 句子?
--------------------------------编辑------------ --------------------------
我将使用@Patrick Piatkowski 提出的声明
SELECT * FROM Course
JOIN Subject
ON Course.id = Subject.course_id
WHERE /* Your filters here */
但是现在这让我想到了另一个问题。当我迭代结果集时,课程的列在每一行中都是相同的。
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 */)
第二种方法的优点是您仅从 Subject 获取列,同时您还使用第一个语句从 Course 获取列。