1

Mybatis 3 には、結合を含む選択クエリの結果をネストされたハッシュマップの結果に変換するという要件があります。

たとえば、次の mybatis マッパー エントリについて考えてみます。

 <select
        id="testCaseSelect"
        fetchSize="1000"
        flushCache="false"
        resultMap="testCaseResultMap" resultType="list">
SELECT TESTCASE_ID,
        TC.TITLE,
        TC.DESCRIPTION ,
        TC.CREATION_DATE ,
        TCS.STATUS_NAME,
        TCP.PRIORITY_NAME ,
        TCCBY.FIRST_NAME,
        TCCBY.LAST_NAME,
        TCST.SEQUENCE_NO ,
        TCST.DESCRIPTION ,
        TCST.EXPECTED_RESULT ,
        TCCMNTS.COMMENT_TEXT ,
        TCCMNTS.LOGGING_DATE
      FROM TESTCASE TC
      INNER JOIN TESTCASE_STATUS TCS
      ON TC.STATUS_ID=TCS.STATUS_ID
      INNER JOIN TESTCASE_PRIORITY TCP
      ON TC.PRIORITY_ID=TCP.PRIORITY_ID
      INNER JOIN USERS TCCBY
      ON TC.CREATED_BY=TCCBY.USER_ID
      LEFT JOIN TESTCASE_STEPS TCST
      ON TC.TESTCASE_ID=TCST.TESTCASE_ID
      LEFT JOIN TESTCASE_COMMENTS TCCMNTS
      ON TC.TESTCASE_ID=TCCMNTS.TESTCASE_ID WHERE TESTCASE_ID BETWEEN 326780 AND 326800
</select>
<resultMap
        id="testCaseResultMap"
        autoMapping="true"
        type="hashMap" >
        <result
            column="TESTCASE_ID"
            property="tcId" />
        <result
            column="TITLE"
            property="title" />
        <result
            column="DESCRIPTION"
            property="description" />
        <result
            column="CREATION_DATE"
            property="createdOn" />
        <association
            columnPrefix="TCS"
            javaType="hashMap"
            property="testCaseStatus" >
            <id
                column="STATUS_ID"
                property="id" />
            <result
                column="STATUS_NAME"
                property="status" />
        </association>
        <association
            columnPrefix="TCP"
            javaType="hashMap"
            property="testCasePriority" >
            <id
                column="PRIORITY_ID"
                property="id" />
            <result
                column="PRIORITY_NAME"
                property="priority" />
        </association>
        <association
            columnPrefix="TCCBY"
            javaType="hashMap"
            property="testCaseCreator" >
            <id
                column="USER_ID"
                property="id" />
            <result
                column="FIRST_NAME"
                property="firstName" />
            <result
                column="LAST_NAME"
                property="lastName" />
        </association>
        <collection
            columnPrefix="TCST"
            javaType="hashMap"
            ofType="list"
            property="testCaseSteps" >
            <id
                column="STEP_ID"
                property="id" />
            <result
                column="SEQUENCE_NO"
                property="stepNo" />
            <result
                column="description"
                property="step" />
            <result
                column="expected_result"
                property="result" />
        </collection>
        <collection
            columnPrefix="TCCMNTS"
            javaType="hashMap"
            ofType="list"
            property="testCaseComments" >
            <id
                column="COMMENT_ID"
                property="id" />
            <result
                column="COMMENT_TEXT"
                property="comment" />
            <result
                column="LOGGING_DATE"
                property="commentedOn" />
        </collection>
    </resultMap>

テスト ケース オブジェクトには、オブジェクトによって作成された優先度オブジェクト、ステータス オブジェクト、ステップのコレクション、およびコメントのコレクションがあります。

 public static void main(String[] args)
    {
        SqlSessionFactory factory = getSqlSessionFactory();
        SqlSession session = factory.openSession();
        List<Map> list = session.selectList("testCaseSelect");
        System.out.print(Arrays.toString(list.toArray()));
    }

上記を実行すると、返された行ごとに 1 つずつ、34 個のハッシュマップのリストが取得されます。各ハッシュマップには、column_name とその値がキーと値のペアとして含まれています。

私が欲しかったのは、次の構造を持つハッシュマップを持つことです:

root(hashMap)=>{
           tcid(String),
           title(String),
           description(String),
           createdOn(String),
           testCaseStatus(hashMap)=>{
                                        status(String)
                                    },
           testCasePriority(hashMap)=>{
                                         priority(String)
                                      },
           testCaseCreator(hashMap)=>{
                                         firstName(String),
                                         lastName(String)
                                     },
           testCaseSteps(list of hashMap):[{
                                                stepno(String),
                                                step(String),
                                                result(String),
                                          }],

           testCaseComments(list of hashMap):[{
                                                comment(String),
                                                commentedOn(String)
                                           }],
        }

mybatisで達成することは可能ですか?

4

0 に答える 0