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

  • 相关阅读:
    github误fork后删除
    初识javascript
    struts验证框架失效
    Java基础学习1Java标识符及基本类型
    dos 命令行方式下启动和停止MySql服务
    html
    给文本框添加边框的两种方法
    银行家算法
    解决MyEclipse里Tomcat端口被占用而无法启动的情况
    Java近似圆
  • 原文地址:https://www.cnblogs.com/emanlee/p/15722560.html
Copyright © 2011-2022 走看看