Java 是否有任何方法可以将特定列的值合并到单个类中?
我正在使用JavaSpringMVC项目处理两个表。 下面的结果是SHOP表与CUSTOMER表的联接Java 是否有任何方法可以将特定列的值合并到单个类中?,java,oracle,mybatis,Java,Oracle,Mybatis,我正在使用JavaSpringMVC项目处理两个表。 下面的结果是SHOP表与CUSTOMER表的联接 | SHOP_NAME | SHOP_NUM | CUSTOMER_NAME | some other columns aside ... | | --------- | --------- | ------------- | ---------------------------- | | 'Mr.Jacks'| 1 | 'Bill' |
| SHOP_NAME | SHOP_NUM | CUSTOMER_NAME | some other columns aside ... |
| --------- | --------- | ------------- | ---------------------------- |
| 'Mr.Jacks'| 1 | 'Bill' | |
| 'Mr.Jacks'| 1 | 'Ryan' | |
| 'Mr.Jacks'| 1 | 'Kate' | |
| 'Mr.Jacks'| 1 | 'Peter' | |
| 'O`sushi' | 2 | 'Jackson' | |
| 'O`sushi' | 2 | 'Park' | |
我想把这些放到SearchResult VO中,它已经
private String shopName;
private int shopNo;
private String[] customerNames;
以及其他一些变量
在上面的表格中,将有两个SearchResult对象。
一个用于Jacks先生,阵列中有4个客户名称
还有一个是寿司,有两个顾客
在Oracle中使用mybatis进行单个查询有什么方法可以做到这一点吗?
我一直在用2个数据库访问来做这件事。
一个用于选择店铺信息,另一个用于客户栏,但我突然想到可能有更好的方法。当然,只需一个查询即可。我不是MyBatis专家,所以我不能告诉您如何在那里映射它,但是使用普通JDBC,您需要执行一个查询,就像您用来生成所显示表的查询一样。然后迭代结果集,为每个新的SHOP_NUM值创建一个新的SearchResultVO,并将每个resultset行中的客户名称添加到相应的SearchResultVO。您甚至可以直接生成一个以数组形式返回客户名称的查询,但我也不是Oracle专家,因此我无法告诉您如何进行查询(如果有的话)。这是一个典型的N+1查询。您可以改为使用联接。这里有一个例子-关键是用XML正确地编码结果映射:@JeffButler感谢您的评论。好像是收藏标签。但我不是用我的自定义类而是字符串数组。如果我把它们放在select标记中,它还能工作吗?@Thomas this make sence,但它不是仍然可以访问数据库两次吗?@flipingflop要使到数组的映射工作,您需要将客户名称转换为SQL中的数组。我认为这可以通过PSQL过程来完成,但似乎不值得这么麻烦。在我的示例中,使用MyBatis N+1支持会容易得多,然后只需使用一行Java代码将List转换为String[]。