连接表并将结果保存在ArrayList-Attribute中

时间:2015-05-17 16:16:58

标签: java mysql arraylist mybatis

每位客户都可以拥有多个驾驶执照课程。例如:客户John可以拥有A,B和C类。有一个表Customer,DrivingLicence和DrivingLicenceCustomer。

select语句看起来像这样(在我的映射器中):

<select id="selectCustomer" resultType="CustomerDTO">
    SELECT *
    FROM Customer c
    INNER JOIN DrivingLicenseCustomer d
    ON c.CustomerID = d.Customer
</select>

结果可能是:

+------------+-------+---------------------+
| CustomerId | Name  | DrivingLicenceClass |
+------------+-------+---------------------+
|          1 | John  | A                   |
|          1 | John  | B                   |
|          1 | John  | C                   |
|          2 | Clara | A                   |
|          3 | Sarah | C                   |
+------------+-------+---------------------+

客户的课程如下:

public class CustomerDTO {
    private int customerId;
    private String name;
    private ArrayList<String> drivingLicences;
    //....
}

正如您在上面的结果中所看到的:有多个行具有相同的客户(每行代表一个对象)。目前我的实现无法正确映射DrivingLicenceClass。结果应如下所示:

+------------+-------+---------------------+
| CustomerId | Name  | DrivingLicenceClass |
+------------+-------+---------------------+
|          1 | John  | {A, B, C}           |
|          2 | Clara | {A}                 |
|          3 | Sarah | {C}                 |
+------------+-------+---------------------+

是否可以通过MyBatis-Mapper自动填充ArrayList? 非常感谢!!!

1 个答案:

答案 0 :(得分:0)

我用以下代码解决了它:

for (CustomerDTO customerDTO : customerList) {
        List<DrivingLicence> licenceList = s.selectList("selectDrivingLicencesByCustomer", customerDTO.getCustomerId());
}

(为每位客户选择drivingLicence)

但那并不是我想要的方式。如果有更好的方法,请告诉我。