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

  • 相关阅读:
    已经加入了gitignore但任然modified
    强制升级方法
    从服务器上拷贝代码到虚拟机上编译不过
    IDEA 全局搜索选择后不关闭当前窗口
    jquery 好看的弹出层,过一会自动消失,有滚动条也能垂直居中(thymeleaf)( 代码库)
    Servlet 直接返回web前端(代码库)
    httpcore Immutable 升级替代方法
    重写equals-hashcode-标准方法(代码库)
    module的顺序影响jar包是从仓库来的,还是从其他module里来的
    AD登录过滤特殊字符,防止LDAP注入(代码库)
  • 原文地址:https://www.cnblogs.com/emanlee/p/15722560.html
Copyright © 2011-2022 走看看