假设需要联结一个app表和evaluation表
1.在被联结表(这里是evaluation表)的mapper.xml文件里新建一个resultMap,列表中添加需要获取的字段:
<resultMap id="EvaluationJoinMap" type="包名.model.Evaluation"
extends="BaseResultMap">
<id property="id" column="evaluation_id" />
<result property="appId" column="evaluation_app_id" />
</resultMap>
(property值是Evaluation.java里的一个属性字段,column值取后面第三步查询语句里相应的别名,联结表后有冲突的字段取别名)
2.在联结表(这里是app表)的mapper.xml文件里新建一个resultMap:
<resultMap type="包名.model.App" id="EvaluationResultMap"
extends="BaseResultMap">
<collection property="appEvaluationList" javaType="list" ofType="包名.model.Evaluation"
resultMap="包名.dao.EvaluationMapper.EvaluationJoinMap">
</collection>
</resultMap>
(特别说明:我的EvaluationMapper.xml放在mapper层下,但是引用地址是”包名.dao.EvaluationMapper.EvaluationJoinMap”,是因为在mapper.xml文件中有一句将地址指向这里)
3.在联结表(这里是app表)的mapper.xml文件里新建一条查询语句:
<select id="getAppEvaluation" resultMap="EvaluationResultMap">
select app.* ,
evaluation.id
evaluation_id,
evaluation.app_id evaluation_app_id,
from
app join
evaluation on
app.id =
evaluation.app_id
</select>
4.特别重要容易被人忽视的一步,在第二步新建的resultMap中新建了一个property为appEvaluationList的,这个property需要在App.java中添加,不添加就会报错(There is no getter for property named ‘appEvaluationList’ in ‘class 包名.model.App’):
@Transient
List<Evaluation> appEvaluationList;
public List<Evaluation> getAppEvaluationList() {
return appEvaluationList;
}
public void setEvaluationList(List<Evaluation> appEvaluationList) {
this.appEvaluationList = appEvaluationList;
}
这篇文章是根据我自己的工程加经验来写的,如果有疑问,欢迎探讨。