mybatis學習16 :一對多處理
阿新 • • 發佈:2022-04-08
-
一對多處理:
-
一個老師擁有多個學生;
-
對於老師而言,就是一對多的關係;
-
-
開發步驟:
-
學生實體類:
public class Student {
private int id;
private String name;
//學生需要關聯一個老師
private int tid;
} -
老師實體類:
public class Teacher {
private int id;
private String name;
//一個老師包含多個學習
private List<Student> students;
} -
新建Mapper介面:
-
新建Mapper.xml配置檔案;
-
-
按照結果巢狀查詢:類似於多表聯查
-
Mapper.xml:注意collection,集合中的泛型資訊:我們使用ofType獲取
<!--按結果巢狀查詢-->
<resultMap id="resMap" type="teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!--
List集合:集合用collection
javaType="" 指定屬性的型別
集合中的泛型資訊:我們使用ofType獲取
-->
<collection property="students" ofType="student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
</collection>
</resultMap>
<select id="getTeacher" resultMap="resMap">
select s.id as sid,s.name sname,t.name as tname,t.id as tid
from teacher t, student s where t.id=s.tid and t.id=#{tid}
</select> -
測試:
-
-
按照查詢巢狀處理:類似於子查詢
-
Mapper.xml:
<resultMap id="resMap2" type="teacher">
<result property="id" column="id"/>
<result property="name" column="name"/>
<collection property="students" column="id" javaType="ArrayList" ofType="student" select="getStudent2"/>
</resultMap>
<select id="getTeacher2" parameterType="_int" resultMap="resMap2">
select * from teacher where id=#{teacherId}
</select>
<select id="getStudent2" parameterType="_int" resultType="student">
select * from student where tid=#{tid}
</select> -
測試類同上!
-
-
總結:
-
關聯:association 【多對一】
-
集合:collection 【一對多】
-
javaType 和 ofType
-
javaType用來指定實體類中屬性的型別;
-
ofType用來指定對映到List和集合中的pojo型別(泛型中的約束);
-
-
-
注意點:
-
保證SQL的可讀性;儘量保證通俗易懂!
-
注意一對多和多對一中,屬性名和欄位的問題!
-
如果問題不好排查錯誤,可以使用日誌,建議使用Log4j
-
-
面試高頻:
-
Mysql引擎
-
-
索引
-
索引優化
-