2014-09-09 4 views
0

У меня есть две таблицы: employee_details (department_id, EMPLOYEE_ID) & skill_details (EMPLOYEE_ID, skill_id). Я хочу построить LinkedHashMap из Employee_Details объектов для каждого DEPARTMENT_ID, таким образом, чтоИспользование resultmap из mybatis собирать предметы в LinkedHashMap

class Employee_Details { 
    long employee_id; 
    ArrayList<long> skill_ids; 
    // other data & code may be 
    ----; 
    ----; 
} 

Как это может быть достигнуто с помощью resultmaps в mybatis

ответ

0

Вы можете использовать <collection> и <resultMap id="" type="java.util.LinkedHashMap">, как это:

EmployeeDetails.java

public class EmployeeDetails { 
    Long employeeId; 
    List<SkillDetails> skillDetails; // mapping snippet is <collection property="skillDetails" ofType="package.SkillDetails" select="selectSkillDetails" column="employee_id"> 
    // get set 
} 

FooMapper.xml

<resultMap id="EmployeeDetailsResultMap" type="java.util.LinkedHashMap" > 
    <result column="employee_id" property="employeeId"/> 
    <!-- employee_id as foreign key --> 
    <collection property="skillDetails" ofType="package.SkillDetails" select="selectSkillDetails" column="employee_id"> 
     <result property="employeeId" column="employee_id"/> 
     <result property="skillId" column="skill_id"/> 
    </collection> 
    </resultMap> 

    <resultMap id="SkillDetailsResultMap" type="java.util.LinkedHashMap" > 
    <result column="col1" property="p1" /> 
    <result column="etc." property="etc." /> 
    </resultMap> 

    <select id="selectSkillDetails" resultMap="SkillDetailsResultMap" > 
    SELECT * 
     FROM skill_details t1 
     where t1.employee_id=#{employee_id} 
    </select> 

    <select id="selectEmployeeDetails" resultMap="EmployeeDetailsResultMap"> 
    SELECT * 
     FROM employee_details t1 
     where t1.department_id=#{department_id} 
    </select> 

*** Точно так же, добавить: **

public class Department { 
    Long departmentId; 
    List<EmployeeDetails> employeeDetails; 
    // get set 
} 

    <resultMap id="DepartmentsResultMap" type="java.util.LinkedHashMap" > 
    <result column="department_id" property="departmentId" /> 
    <collection property="..." ofType="..." select="selectEmployeeDetails" column="employee_id"> 
     <result property="employeeId" column="employee_id"/> 
     <result property="..." column="..."/> 
    </collection> 
    </resultMap> 

    <select id="selectDepartments" resultMap="..." > 
    SELECT * 
     FROM ... 
    </select> 

Они все LinkedHashMap, -_-!
Надеюсь, что эта помощь ...

+0

Как работает EmployeeDetailsResultMap resultmap результаты в создании объекта класса EmployeeDetails? Это сопоставление не указано для класса EmployeeDetails. –

+0

Вы можете изменить значение атрибута «type» '' to "package.EmployeeDetails". – okin2014

+0

Тогда как mybatis обеспечит возврат LinkedHashMap EmployeeDetailsResultMap? Можете ли вы также поделиться файлом интерфейса? –