[英]Mapping a tree with MyBatis?
我試圖通過設置樹結構並使用MyBatis映射它來弄亂自己的方式。 我的表定義為;
CREATE TABLE `Hierarchy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentId` int(11) NULL DEFAULT NULL,
`name` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我試圖與MyBatis建立關聯;
@Select(SELECT_ALL)
@Results(value = {
@Result(property = "id", column = "id"),
@Result(property = "children", column = "parentId",
jdbcType = JdbcType.NUMERIC,
many = @Many(select = "selectById")),
@Result(property = "name", column = "name")
})
List<Hierarchy> selectAll();
我班有
private Integer id;
private Integer parentId;
private String name;
private List<Hierarchy> children;
我很快意識到這是行不通的,因為它最終將向后關聯,並且我在結果集中多次返回了孩子。 那么答案是什么呢? 完成選擇並以這種方式填充我的孩子后,是否需要迭代?
我嘗試了幾種方法,但是它們似乎都效率極低,而且我發現很難處理父ID的前向引用而又不會重復兩次該列表。
那么,有沒有人把它拉下來? 訣竅是什么?
幾年前,我使用iBatis做到了這一點,但對結果從未滿意。 我的樹是只讀的,這簡化了代碼。 我還需要上下導航樹,因此每個記錄都有一個父類指針。 該算法(使用您的類名等)為:
這一切都很好,但遠非優雅。 如您所述,該列表需要兩次通過。 如果您找到更好的方法,請分享。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.