1. 程式人生 > >mybatis 查詢資料庫,返回map集合

mybatis 查詢資料庫,返回map集合

1.不指定返回的key:返回以學員id為key,學員資訊為value的集合 

java程式碼(dao實現層)

/**
 * 獲取學員分類 以id為key, StudentType物件為value
 *
 * @return
 */
@Override
public Map<Long, StudentType> getStudentTypeMap() {
    return this.sqlSession.selectMap("StudentTypeMapper.getStudentTypeMap","id");
}

mapper檔案 

<!--獲取學員分類 以id為key, StudentType物件為value-->
<select id="getStudentTypeMap" resultType="StudentType">
    select
    <include refid="edu_student_type_columns"/>
    from edu_student_type
</select>

2.指定返回的map中的具體的key

dao層:指定key為userPaper

    public Map<String, PaperRecordDto> getExamPaperRecordMaxScoreByUserIds(String userIds) {
        return sqlSession.selectMap("PaperRecordMapper.getExamPaperRecordMaxScoreByUserIds",userIds,"userPaper");
    }

 

mapper檔案

 <!--獲取使用者每張試卷的最高成績的考試資訊 以 userId_parentId 作為key, PaperRecord物件作為value
        此處內層查詢 在mysql5.7後 order by 欄位後必須加 limit 否則外層group by 的結果仍未排序-->
    <select id="getExamPaperRecordMaxScoreByUserIds" parameterType="String" resultType="PaperRecordDto">
        SELECT * FROM (
          SELECT CONCAT_WS('_', cus_id, parent_id) AS userPaper,
            exam_exampaper_record.id,
            exam_exampaper_record.user_score AS userScore,
            exam_exampaper_record.cus_id AS cusId,
            exam_exampaper_record.parent_id AS parentId,
            exam_exampaper_record.add_time AS addTime
            FROM exam_exampaper_record
            WHERE exam_exampaper_record.status = 0
            AND !ISNULL(parent_id)
            AND cus_id IN (${value})
            ORDER BY user_score DESC LIMIT 100000000
        )AS a
        GROUP BY a.cusId, a.parentId
    </select>