mybatis一對多關系的關聯查詢


問題描述:實現兩張表的關聯查詢

學生表:

班級表:

要實現學生管理信息中有所在班級的名稱,即如下圖所示

1.對應學生表的pojo類寫全班級表中的字段(適用於要連接的表字段較少的情況)

sql語句直接在mapper接口里用注解的方式寫就可以了,一目了然

2.使用resultmap手動關聯映射

student的pojo類寫一個Clazz類型的字段,封裝班級信息

然后用xml的方式寫sql語句,在寫sql語句之前我們要在配置文件里聲明xml的路徑,以及為了方便,為pojo類起別名

    <resultMap id="smap" type="student">
        <id property="id" column="sid"/>
        <result property="name" column="name"/>
        <result property="phone" column="phone"/>
        <association property="clazz" javaType="clazz">
            <id property="id" column="cid"/>
            <result property="title" column="title"/>
        </association>
    </resultMap>

    <select id="selectAll" resultMap="smap">
        select s.id sid,s.name,s.phone,c.id cid,c.title title
        from student s left join clazz c on s.clazz_id=c.id
    </select>

associattion 是關系,代表一個學生對象中包含有一個班級對象,javaType 屬性表示當前對象

3.使用resultType自動映射配合別名實現

這種方式是最簡易的,但是要注意別名因為包含特殊符號,我們需要加上引號

效果圖

 

另外還有N+1方式,那樣是寫兩條sql語句,resultMap中關聯(association)另外一個對象的語句

(N+1模式案例:Mybatis關聯查詢)

 

還有在業務層中處理邏輯,即先用一條sql語句

select * from student

查詢出學生集合,通過學生的班級Id去調用

select * from clazz where id=#{id}

查詢出對應的班級信息,再遍歷學生集合封裝到student對象中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM