mybatis 多表关联查询

首先这里有两个表分别是seckill(秒杀表),success_killed(秒杀成功明细表)两个表和seckill和successkilled两个实体类
seckill表:


image.png

success_killed:


image.png

连个表是靠seckill_id这个字段来进行关联的
1.一对一关系的时候:在seckill实体类中添加successkilled属性
private SuccessKilled successKilled;
在xml配置文件中配置如下:

   <resultMap id="seckillMap" type="Seckill">
        <id column="seckill_id" property="seckillId"></id>
        <result property="name" column="name"/>
        <result property="number" column="number"/>
        <result property="startTime" column="start_time"/>
        <result property="endTime" column="end_time"/>
        <result property="createTime" column="create_time"/>      
        <association property="successKilled" javaType="SuccessKilled">
            <result property="userPhone" column="user_phone"/>
            <result property="state" column="state"/>
            <result property="createTime" column="ctime"/>
        </association>
    </resultMap>
  <select id="findundetailById" resultMap="seckillMap">
     select se.seckill_id as seckill_id,
      se.name,
      se.number,
      se.start_time,
      se.end_time,
      se.create_time,
      su.seckill_id as sid,
      su.user_phone,
      su.state,
      su.create_time as ctime
      from seckill se LEFT JOIN success_killed su
     on se.seckill_id = su.seckill_id
     <where>
         <if test="id !=null">se.seckill_id = #{id}</if>
     </where>
  </select>

在result中添加<association>标签,其中property 属性为实体类种的属性名字,column 属性为sql中查询出来的列的名字(有别名的时候是别名的名称,并且不能让列名相同)
2.一对多关系的时候,在seckill实体类中添加successkilled属性
private List<SuccessKilled > successKilleds;
在xml配置文件中配置如下:

   <resultMap id="seckillMap" type="Seckill">
        <id column="seckill_id" property="seckillId"></id>
        <result property="name" column="name"/>
        <result property="number" column="number"/>
        <result property="startTime" column="start_time"/>
        <result property="endTime" column="end_time"/>
        <result property="createTime" column="create_time"/>      
        <collection property="successKilleds" 
                ofType="com.ygf.domain.SuccessKilled">
<!--  这里的column对应的是下面查询的别名,而不是表字段名   -->
<!-- property对应JavaBean中的属性名 -->
        <id property="seckillId" column="sid"></id>
        <result property="userPhone" column="user_phone"/>
        <result property="state" column="state"/>
        <result property="createTime" column="ctime"/>
        </collection>
    </resultMap>

在result中添加<collection>标签 其中property为实体类中的属性名,ofType为实体类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,645评论 19 139
  • 一步一步的搭建JAVA WEB项目,采用Maven构建,基于MYBatis+Spring+Spring MVC+B...
    叶子的翅膀阅读 14,368评论 5 25
  • 前言 本篇将完成DAO层的设计与开发,包括: 数据库、DAO实体与接口设计与编码 基于MyBatis实现DAO编程...
    MOVE1925阅读 5,190评论 0 4
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,164评论 0 4
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,088评论 6 342