2012-03-01 3 views
3

Как сопоставить несколько столбцов со списком в IBATIS?ArrayList Сопоставление в IBatis

У меня есть Bean, говорят:

public class AttendanceBean { 
    private String user_id; 
    private String user_name; 
    private List daysArray; 
    // setter/getter methods 
} 

Ibatis (выберите пункт в sqlMap):

<select id="someName" parameter="param"> 
    select user_id,user_name, 
     day_1, 
     day_2, 
     day_3, 
     ... 
     ... 
     day_31 
    from table1,table2 
    where table1.userid=table2.userid 
<select> 

Мой вопрос, как я буду Карта daysArray AttendanceBean с колоннами day_1, day_2, ... day_31 в ResultMap, хотя я могу просто написать код JDBC для этого следующим образом:

List alluser = new ArrayList(); 
while (rs.next()) { 
    AttendanceBean ab = new AttendanceBean(); 
    ab.setUser_id(rs.getString("USER_ID")); 
    ab.setUser_name(rs.getString("USER_NAME")); 
    List tempArray = new ArrayList(); 
    for (int i=1;i<=noOfDaysinMonth;i++) { 
     tempArray.add(rs.getString("DAY_"+i)); 
    } 
    ab.setDayArray(tempArray); 
    alluser.add(ab); 
} 
+0

Какой тип 'daysArray'? 'Список ' или что-то? Как выглядит «День»? –

+0

Как выглядят ваши таблицы? –

+0

daysArray - List.List of String .., который будет поступать из базы данных. – faraz

ответ

4

Faraz Я принимаю daysArray - это количество дней, в которые участвовал конкретный пользователь? Было бы полезно добавить некоторые детали вашей схемы. В таблице с количеством дней также есть идентификатор пользователя? Предполагая, у вас есть аналогичный случай, вы можете сделать следующее (этот пример основан на версии 2.3.4 iBatis).

<select id="retrieveAllUserAttendences" resultMap="exampleUserAttendences"> 
    SELECT 
    table1.user_id, 
    table1.user_name, 
    table2.day 
    FROM table1 
    INNER JOIN table2 ON table2.user_id = table1.user_id 
</select> 

<resultMap id="exampleUserAttendences" class="AttendanceBean" groupBy="user_id"> 
    <result property="user_id" column="user_id" jdbcType="VARCHAR" javaType="java.lang.String"/>   
    <result property="user_name" column="user_name" jdbcType="VARCHAR" javaType="java.lang.String"/> 
    <result property="daysArray" resultMap="sqlMapNamespace.exampleDaysResultMap" />  
</resultMap> 

<resultMap id="exampleDaysResultMap" class="java.lang.String"> 
    <result property="daysArray" column="day_column_name" jdbcType="VARCHAR" javaType="java.lang.String"/> 
</resultMap> 

Снова я должен подчеркнуть, что это пример и зависит от того, как вы храните свои данные/схему, но надеюсь, что этот пример поможет.

Смежные вопросы