省市区三级联动

数据库表

省、市、区三种数据都放在同一张表中。

create table if not exists tb_region
(
    id          bigint auto_increment comment '主键id'
        primary key,
    region_name varchar(16) not null comment '地区名称',
    type        int         not null comment '地区级别;1代表省,2代表市,3代表区',
    up_level    bigint      null comment '上一级地区;绑定主键id;无上一级则为0',
    create_time datetime    not null comment '创建时间',
    update_time datetime    not null comment '更新时间',
    constraint id
        unique (id),
    constraint region_name
        unique (region_name)
)
    comment '地区表';

insert into tb_region (id, region_name, type, up_level, create_time, update_time)
values (null, '江西省', 1, 0, now(), now()),
       (null, '赣州市', 2, 1, now(), now()),
       (null, '抚州市', 2, 1, now(), now()),
       (null, '南昌市', 2, 1, now(), now()),
       (null, '章贡区', 3, 2, now(), now()),
       (null, '南康区', 3, 2, now(), now()),
       (null, '赣县区', 3, 2, now(), now()),
       (null, '东乡区', 3, 3, now(), now()),
       (null, '临川区', 3, 3, now(), now()),
       (null, '东湖区', 3, 4, now(), now()),
       (null, '西湖区', 3, 4, now(), now()),
       (null, '红谷滩区', 3, 4, now(), now());

pojo

RegionEntity地区表实体类,RegionVO地区属性封装类。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegionEntity {
    private Long id;
    private String regionName;
    private Integer type;
    private Long upLevel;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegionVO {
    private Long id;
    private String regionName;
    private Integer type;
    private Long upLevel;
    private List<RegionVO> list;
}

mapper

RegionMapper接口,查询地区。

import com.demo.pojo.RegionEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface RegionMapper {

    @Select("select id, region_name, type, up_level, create_time, update_time from tb_region")
    List<RegionEntity> getRegion();
}

单元测试

通过循环判断进行分类,再放入对应的集合中。

import com.demo.mapper.RegionMapper;
import com.demo.pojo.RegionEntity;
import com.demo.pojo.RegionVO;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private RegionMapper regionMapper;

    @Test
    public void getRegionTest() {

        List<RegionEntity> regionEntityList = regionMapper.getRegion();

        List<RegionVO> regionVOList1 = new ArrayList<>();
        List<RegionVO> regionVOList2 = new ArrayList<>();
        List<RegionVO> regionVOList3 = new ArrayList<>();

        for (RegionEntity regionEntity : regionEntityList) {
            if (regionEntity.getType().equals(1)) {
                RegionVO regionVO = new RegionVO();
                BeanUtils.copyProperties(regionEntity, regionVO);
                regionVOList1.add(regionVO);
            } else if (regionEntity.getType().equals(2)) {
                RegionVO regionVO = new RegionVO();
                BeanUtils.copyProperties(regionEntity, regionVO);
                regionVOList2.add(regionVO);
            } else if (regionEntity.getType().equals(3)) {
                RegionVO regionVO = new RegionVO();
                BeanUtils.copyProperties(regionEntity, regionVO);
                regionVOList3.add(regionVO);
            }
        }

        for (RegionVO regionVO1 : regionVOList1) {

            List<RegionVO> list1 = new ArrayList<>();

            //第二层循环得到regionVO1中的list
            for (RegionVO regionVO2 : regionVOList2) {

                List<RegionVO> list2 = new ArrayList<>();

                if (regionVO1.getId().equals(regionVO2.getUpLevel())) {

                    //第三层循环得到regionVO2中的list
                    for (RegionVO regionVO3 : regionVOList3) {
                        if (regionVO2.getId().equals(regionVO3.getUpLevel())) {
                            list2.add(regionVO3);
                        }
                    }

                    regionVO2.setList(list2);
                    list1.add(regionVO2);
                }
            }

            regionVO1.setList(list1);
        }

        System.out.println(regionVOList1);
    }
}

查看结果

成功实现省市区三级联动。

[RegionVO(id=1, regionName=江西省, type=1, upLevel=0, list=[RegionVO(id=2, regionName=赣州市, type=2, upLevel=1, list=[RegionVO(id=5, regionName=章贡区, type=3, upLevel=2, list=null), RegionVO(id=6, regionName=南康区, type=3, upLevel=2, list=null), RegionVO(id=7, regionName=赣县区, type=3, upLevel=2, list=null)]), RegionVO(id=3, regionName=抚州市, type=2, upLevel=1, list=[RegionVO(id=8, regionName=东乡区, type=3, upLevel=3, list=null), RegionVO(id=9, regionName=临川区, type=3, upLevel=3, list=null)]), RegionVO(id=4, regionName=南昌市, type=2, upLevel=1, list=[RegionVO(id=10, regionName=东湖区, type=3, upLevel=4, list=null), RegionVO(id=11, regionName=西湖区, type=3, upLevel=4, list=null), RegionVO(id=12, regionName=红谷滩区, type=3, upLevel=4, list=null)])])]
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值