mybatis查詢樹結構,以省市區舉例(數據庫遞歸查詢方式)

樹結構實體類:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("AREA_INFO")
public class AreaInfo{
    //行政區域編號
    @TableId(value = "AREA_NO", type = IdType.ID_WORKER_STR)
    private String areaNo;
    // 行政區域名稱
    @TableField("AREA_NAME")
    private String areaName;
    // 父區域編號
    @TableField("PARENT_AREA_NO")
    private String parentAreaNo;
    // 備註
    @TableField("REMARK")
    private String remark;
    //狀態(0-無效;1-有效)
    @TableField("STATUS")
    private String status;
    //子元素
    @TableField(exist = false)
    private List<McsAreaInfo> children;
}

數據庫表機構如下:

CREATE TABLE `AREA_INFO` (
  `AREA_NO` varchar(32) NOT NULL COMMENT '行政區域編號',
  `AREA_NAME` varchar(128) DEFAULT NULL COMMENT '行政區域名稱',
  `PARENT_AREA_NO` varchar(32) DEFAULT NULL COMMENT '父區域編號',
  `REMARK` varchar(512) DEFAULT NULL COMMENT '備註',
  `STATUS` varchar(8) DEFAULT NULL COMMENT '狀態(0-無效;1-有效)',
  PRIMARY KEY (`AREA_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='區域表';

java dao中如下:

@Mapper
public interface AreaInfoDao extends BaseMapper<AreaInfo> {
	//獲取區域樹形菜單
	public List<AreaInfo> getAreaInfoTree(String parentAreaNo);
}

mybatis中sql如下:

<resultMap type="com.AreaInfo" id="areaInfoResult">
        <id column="AREA_NO" property="areaNo"/>
        <result column="AREA_NAME" property="areaName"/>
        <result column="STATUS" property="status"/>
        <collection column="AREA_NO" property="children" ofType="com.AreaInfo"                 
        select="getAreaInfoTree"></collection>     </resultMap>
 <select id="getAreaInfoTree" resultMap="areaInfoResult" parameterType="string">
        select AREA_NO,AREA_NAME,PARENT_AREA_NO,STATUS from AREA_INFO where             
        PARENT_AREA_NO=#{parentAreaNo}
 </select>

 

說明:此查詢方式只是適合於少量數據查詢,如果數據量太大數據庫壓力特別大,所以不建議使用,針對於大量的樹形數據,可採用懶加載的方式,或者直接查詢出列表交給前段自己處理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章