pinked

导航

多对一处理

多对一处理

SQL:

CREATE TABLE `teacher`(
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO teacher(`id`,`name`) VALUES(1,'大老师');

CREATE TABLE `student`(
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktif`(`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO `student`(`id`,`name`,`tid`)VALUES('1','小明','1');
INSERT INTO `student`(`id`,`name`,`tid`)VALUES('2','小红','1');
INSERT INTO `student`(`id`,`name`,`tid`)VALUES('3','小张','1');
INSERT INTO `student`(`id`,`name`,`tid`)VALUES('4','小李','1');
INSERT INTO `student`(`id`,`name`,`tid`)VALUES('5','小王','1');

测试环境搭建

  1. 导入Lombok

  2. 新建实体类Teacher和Student

  3. 建立Mapper接口

  4. 建立Mapper.xml文件

  5. 在核心配置文件中绑定注册Mapper接口或文件

  6. 测试

按照查询嵌套处理

<resultMap id="StudentTeacher" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <!--复杂的属性需要单独处理   对象:association   集合:collection-->
        <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>

    <select id="getStudent" resultMap="StudentTeacher">
        select * from student
    </select>
    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id = #{id}
    </select>

按照结果嵌套处理

<resultMap id="StudentTeacher2" type="Student">
    <result property="id" column="sid"/>
    <result property="name" column="sname"/>
    <!--复杂的属性需要单独处理   对象:association   集合:collection-->
    <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
    </association>
</resultMap>

<select id="getStudent2" resultMap="StudentTeacher2">
    select s.id sid, s.name sname, t.name tname
    from student s, teacher t
    where s.tid = t.id;
</select>

类似于Mysql中的多对一查询:

  • 子查询

  • 连表查询

posted on 2020-01-10 19:07  pinked  阅读(170)  评论(0编辑  收藏  举报