zoukankan      html  css  js  c++  java
  • mybatis 一对多关联查询

    以篮球队和篮球运动员为例,一个篮球队关联着多个篮球队员

    创建球队的表,里面有两个字段:
    id:主键
    name:球队名称

    CREATE TABLE `t_team` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(45) NULL,
      PRIMARY KEY (`id`));

    创建球员的表,有三个字段:
    id:主键
    name:球员姓名
    tid:所在球队的主键id

    CREATE TABLE `t_player` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(45) NULL,
      `tid` INT NULL,  /* 所在球队的主键id */
      PRIMARY KEY (`id`));

    创建篮球运动员的类Player:

    /**
     * 篮球队员
     */
    public class Player {
    
        private int id;
        private String name;
    
        @Override
        public String toString() {
            return "Player{" +   "id=" + id +  ", name='" + name + '\'' +   '}';
        }
        //省略setter和getter
    }

    创建球队的类Team,这里将球员数据全部放到一个List集合中:

    import java.util.List;
    
    /**
     * 篮球队
     */
    public class Team {
    
        private int id;
        private String name;
    
        private List<Player> playerList;
    
        @Override
        public String toString() {
            return "Team{" +   "id=" + id +   ", name='" + name + '\'' +   ", playerList=" + playerList +  '}';
        }
        //省略setter和getter
    }

    创建TeamMapper.xml映射文件:

    此时涉及到两张表的操作,即使你的字段名和bean属性名一致也要编写resultMap来进行关联。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.monkey1024.dao.TeamDao">
    
        <resultMap id="teamMap" type="Team">
            <!--team中的基本属性-->
            <id column="teamid" property="id"/>
            <result column="tname" property="name"/>
    
            <!--关联属性的映射关系-->
            <collection property="playerList" ofType="Player">
                <id column="pid" property="id"/>
                <result column="pname" property="name"/>
            </collection>
        </resultMap>
    
    
        <select id="selectTeamById" resultMap="teamMap">
            SELECT t.id teamid,t.name tname,p.id pid,p.name pname
            FROM t_team t , t_player p
            WHERE t.id = p.tid and t.id=#{id}
        </select>
    </mapper>

    上面sql语句中的collection标签可以表示集合类型,其中:

    • property 中填写集合在Team 中的属性名称,此时是 playerList
    • ofType 中填写集合的泛型

    在collection标签中填写的内容关联的是Player中的属性。

    REF

    http://www.monkey1024.com/framework/1366

  • 相关阅读:
    FastDFS 安装与使用
    leecode刷题(18)-- 报数
    时间戳转换日期格式
    嵌入式Linux的FTP服务端软件(stupid-ftpd)
    iMx280A测试声纹
    Linux 版本查询
    Linux下的目录结构
    uboot主Makefile分析
    uboot配置过程详解1
    路由器设置
  • 原文地址:https://www.cnblogs.com/emanlee/p/15722560.html
Copyright © 2011-2022 走看看