我們的需求是:查詢一個需求Id下面對應(yīng)的多個set毙石。
使用關(guān)聯(lián)查詢的時候廉沮,因為要構(gòu)造返回結(jié)果對象,如果因為一個返回結(jié)果對象徐矩,就要創(chuàng)建兩個java文件的話滞时,那么后面項目也會看起來過于臃腫。那么滤灯,今天嘗試了一下使用外部類+內(nèi)部類的方式坪稽,進(jìn)行結(jié)果映射曼玩。
1.返回結(jié)果對象構(gòu)造
/**
* @ClassName ReqVo
* @Description TODO
* @Date 2019/8/22 11:20
* @Created by sunyiwei
*/
public class ReqVo implements Serializable {
private static final long serialVersionUID = -3001162196916396442L;
private String reqId;
private SetVo setVo;
public ReqVo() {
}
@Override
public String toString() {
return "ReqVo{" +
"reqId='" + reqId + '\'' +
", setVo=" + setVo +
'}';
}
static class SetVo{
private String setId;
public SetVo() {
}
@Override
public String toString() {
return "SetVo{" +
"setId='" + setId + '\'' +
'}';
}
}
}
上面的類創(chuàng)建符合javaBean規(guī)范,省略了set&get方法窒百,其中內(nèi)部類使用的是靜態(tài)內(nèi)部類黍判,否則會報錯,如下所示:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.cheng.test.Outer$Innermatching [java.lang.Integer, java.lang.Int]
2.持久層接口定義
/**
* @ClassName SboxSetDao
* @Description TODO
* @Date 2019/7/18 9:23
* @Created by sunyiwei
*/
@Repository
public interface SboxSetDao extends MyBaseDao<SboxSet> {
ReqVo getVo(String reqId);
}
3.mapper.xml文件配置
<resultMap id="voMap" type="com.hierway.vslm.domain.stream.ReqVo">
<id property="reqId" column="req_id"/>
<collection property="setVo" ofType="com.hierway.vslm.domain.stream.ReqVo$SetVo">
<id property="setId" column="set_id"/>
</collection>
</resultMap>
<!-- ReqVo getVo(String reqId);-->
<select id="getVo" resultMap="voMap" parameterType="String">
select ss.req_id,ss.set_id from sbox_set as ss where req_id = #{reqId}
</select>
配置主要包括resultMap
的定義篙梢,以及與持久層接口方法名對應(yīng)的sql元素定義顷帖。
4.單元測試
測試結(jié)果