關於實體類中多層嵌套集合,用mybatis的collection標簽可以快速實現


關於實體類中多層嵌套集合,用mybatis的collection標簽可以快速實現


一,首先分析需求在有三個實體類的情況下,好比user類,Student,YearClass類,結構如下

//最外層類
public class user {
private String name;
private String age;

private List<Student> students;
}

//中間層類
public class Student {

private String school;

private String addr;

private List<YearClass> yearClasses;
}
//最內層類
public class YearClass {
private String classNo;

private int stuNum;

}



由於本人工作經驗不多,之前碰到這種情況,我都是用循環逐個賦值,但是這次由於對效率有效求,所以就舍棄之前的循環賦值的方法,就用了mybatis中collection標簽進行嵌套賦值,這個方法真的寫起來非常簡便,比我之前那種笨方法好太多了。

二. XML層大概如下所示


<resultMap id="BaseResultMap" type="com.java.model.User">
<result column="NAME" property="name" jdbcType="VARCHAR"/>
<result column="AGE" property="age" jdbcType="VARCHAR"/>
<collection property="students" javaType="List" ofType="com.java.model.Student" resultMap="BaseResultMapTwo">

</collection>
</resultMap>

<resultMap id="BaseResultMapTwo" type="com.java.model.Student">
<result column="SCHOOL" property="school;" jdbcType="VARCHAR"/>
<result column="addr" property="addr" jdbcType="VARCHAR"/>
<collection property="yearClasses" javaType="List" ofType="com.java.model.YearClass" resultMap="BaseResultMapThree">

</collection>
</resultMap>

<resultMap id="BaseResultMapThree" type="com.java.model.YearClass">
<result column="CLASSNO" property="classNo;" jdbcType="VARCHAR"/>
<result column="STUNUM" property="stuNum" jdbcType="INTEGER"/>
</resultMap>
這中結構是在xml中將集合中的元素用了collection標簽,而且可以多級嵌套(能多少我也不清楚,我最多是三層,更多沒試過)

而且這樣的話SQL的編寫,只需要將字段的值查出來就行,注意名字自定要和resultMap標簽中的名字一一對應就行(順序亂了沒關系),這樣mybatis會自己幫我們處理結果,而且到MVC層我們就不需要進行逐一賦值了,直接調用mapper層接口就行,會省去很多的麻煩

@PostMapping
private Object getData() {

List<User> users = userAllMapper.selectStu();

return users;

}


免責聲明!

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



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