SSM框架:Mybatis中resultMap 多对一使用

在本次使用中的需求如下:球员可以对教练进行评价,评价信息将存入数据库pingjia2表中,查询评价信息表时,需要显示的字段为 :

  • pingjia2Content(评价内容)
  • pingjia2Name(写评价的人的姓名)
  • coachName(教练名)

【pingjia2表字段】:

  • pingjia2Id(评价表id)
  • pingjia2Content(评价内容)
  • pingjia2Name(写评价的人的姓名),
  • pingjiaInfo(外键,被评价教练的id,与教练信息表(coach)中的coachID对应)

【coach表字段】:

  • coachId(教练id)
  • coachName(教练名)
    coachAccount
    coachPwd
    coachPost
    coachAge
    coachSex
    coachBarthday
    (删除线内的字段没有用到)

第一步:编写实体类

//教练实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Coach {
    private int coachId;
    private String coachName;
    private String coachAccount;
    private String coachPwd;
    private String coachPost;
    private Integer coachAge;
    private String coachSex;
    private Date coachBarthday;
}
//球员对教练的评价信息表  实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pingjia2 {
    private int pingjia2Id;
    private String pingjia2Content;
    private String pingjia2Name;

    //外键连接 pingjiaInfo = coacheId
    private Coach coaches; //将教练以对象的形式引入
}

第二步:mybatis-config.xml配置
将Mapper注册到配置文件中

<!-- 每一个Mapper都需在配置文件中注册 -->
<mappers>
    <mapper class="com.gjw.dao.FootballMapper"/>
</mappers>

第三步:Dao层的FootballMapper(接口)

//查询全部评价
List<Pingjia2> queryAllPingjia2();

第四步:FootballMapper.xml 实现接口的.xml文件
个人使用的是写法一,写法二可供学习参考

resultMap写法一:

<!-- 首先将所需查询的SQL完整写完,并给所需的每个字段赋予别名 -->
<select id="queryAllPingjia2" resultMap="Pingjia2CoachResultMap">
    select a.pingjia2Content aContent,  a.pingjia2Name aName,  b.coachName bName
    from football.pingjia2 a,  football.coach b
    where a.pingjiaInfo = b.coachId
</select>
<resultMap type="Pingjia2" id="Pingjia2CoachResultMap">
    <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
    <!-- property:字段在pojo中的属性名 -->
    <!-- column:字段在SQL中的别名 -->
    <result property="pingjia2Content" column="aContent" />
    <result property="pingjia2Name" column="aName" />
    <!-- 配置一对多的关系
        property:填写pojo类中集合类类属性的名称
        javaType:填写集合类型的名称
        复杂属性↓↓↓↓
        对象使用 association; 集合使用collection-->
    <association property="coaches" javaType="Coach">
        <!-- property:字段在pojo中的属性名 -->
    	<!-- column:字段在SQL中的别名 -->
        <result property="coachName" column="bName"/>
    </association>
</resultMap>

resultMap写法二:

<select id="queryAllPingjia2" resultMap="Pingjia2CoachResultMap">
    select pingjia2.pingjia2Content,pingjia2.pingjia2Name
    from football.pingjia2
</select>
<resultMap type="Pingjia2" id="Pingjia2CoachResultMap">
    <!-- 配置主键,是关联Order的唯一标识 -->
    <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
    <!-- property:主键在pojo中的属性名 -->
    <id property="pingjia2Id" column="pingjia2Id" />
    <result property="pingjia2Content" column="pingjia2Content" />
    <result property="pingjia2Name" column="pingjia2Name" />
    <!-- 配置一对多的关系
        property:填写pojo类中集合类类属性的名称
        javaType:填写集合类型的名称
        复杂属性↓↓↓↓
        对象使用 association; 集合使用collection-->
    <association property="coaches" column="pingjiaInfo" javaType="Coach" select="getCoach">
    </association>
</resultMap>

<select id="getCoach" resultType="Coach">
    select coachName from football.coach where coachId = #{pingjiaInfo}
</select>

第五步:service层

接口:

//查询全部评价
List<Pingjia2> queryAllPingjia2();

实现类:

//查询全部评价
public List<Pingjia2> queryAllPingjia2() {
    return footballMapper.queryAllPingjia2();
}

第六步:Controller层

@RequestMapping("/allPingjia2")
public String allPingjia2(Model model){
    List<Pingjia2> pingjia = footballService.queryAllPingjia2();
    //查询出来的数据封装在pingjiaList中  "pingjiaList"别名
    model.addAttribute("pingjiaList",pingjia);
    return "adminPingjia";
}

第七步:前端jsp页面渲染

<tr>
    <th>评价内容</th>
    <th>评价人</th>
    <th>被评价人</th>
</tr>
<%--   评价信息从数据库中查询出来,从这个pingjia2List中遍历出来:foreach  --%>
<tbody>
<%--   类似于键值对,通过 var="pingjia"遍历 封装在model中的pingjia2List数组  --%>
<c:forEach var="pingjia" items="${requestScope.get('pingjiaList')}">
    <tr>
        <td>${pingjia.pingjia2Content}</td>
        <td>${pingjia.pingjia2Name}</td>
        <%-- 从pingjia2实体类中的对象属性 coaches中将 coachName获取到--%>
        <td>${pingjia.coaches.coachName}</td>
    </tr>
</c:forEach>
</tbody>

最终效果如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿茵程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值