問題描述:實現兩張表的關聯查詢
學生表:
班級表:
要實現學生管理信息中有所在班級的名稱,即如下圖所示
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對象中