日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MyBatis 查詢時(shí)屬性中一對多的問題(一條數(shù)據(jù)對應(yīng)多條數(shù)據(jù))

 路人甲Java 2021-05-19

前期準(zhǔn)備

數(shù)據(jù)表

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 `fktid` (`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);

Student 實(shí)體類

public class Student {
    private int id;
    private String name;

    private int tid;
}

Teacher 實(shí)體類

public class Teacher {
    private int id;
    private String name;

    private List<Student> students;
}

接口

public interface TeacherMapper {
    // 查詢嵌套處理 - 子查詢
    Teacher getTeacherById(int id);

    // 結(jié)果嵌套處理
    Teacher getTeacherResultById(int id);
}


按照查詢嵌套處理

  • collection:處理集合
    • property:實(shí)體類中屬性字段
    • column:查詢結(jié)果中需要傳遞給子查詢的字段
    • javaType:指定屬性的類型
    • ofType:指定集合中泛型
    • select:子查詢SQL
<mapper namespace="com.pro.dao.TeacherMapper">
    <!--  查詢嵌套處理
            1. 先查詢出老師的信息
            2. 根據(jù)老師關(guān)聯(lián)學(xué)生的字段用子查詢?nèi)ゲ樵儗W(xué)生的信息
    -->
    <resultMap id="TeacherMap" type="com.pro.pojo.Teacher">
        <result property="id" column="id"/>
        <collection property="students" column="id" javaType="List" ofType="com.pro.pojo.Student" select="getStudentById"/>
    </resultMap>

    <select id="getTeacherById" resultMap="TeacherMap">
        select * from teacher where id = #{id}
    </select>

    <!--子查詢-->
    <select id="getStudentById" resultType="com.pro.pojo.Student">
        select * from student where tid = #{id}
    </select>
</mapper>


按照結(jié)果嵌套處理

  • collection:處理集合
    • javaType:指定屬性的類型
    • ofType:指定集合中泛型
<mapper namespace="com.pro.dao.TeacherMapper">
    <!--  結(jié)果嵌套處理
            1. 一次查詢出所有的信息
            2. 根據(jù)查詢結(jié)果使用 collection 配置對應(yīng)屬性和字段
    -->
    <resultMap id="TeacherResult" type="com.pro.pojo.Teacher">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <!--   collection: 處理集合, javaType: 指定屬性類型, ofType: 指定泛型     -->
        <collection property="students" javaType="List" ofType="com.pro.pojo.Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
        </collection>
    </resultMap>

    <select id="getTeacherResultById" resultMap="TeacherResult">
        select t.*, s.id sid, s.name sname  from teacher t, student s where t.id = #{id} and t.id = s.tid
    </select>
</mapper>


小結(jié)

  1. 關(guān)聯(lián) - association 處理多對一
  2. 集合 - collection 處理一對多
  3. javaType & ofType
    1. javaType: 用來指定實(shí)體類中屬性的類型
    2. ogType: 指定集合中的類型,泛型中的約束類型

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多