省市区三级联动

  我用循环来做的,一层套着一层,先查出省的数据,在根据省查市的数据,在根据市查区的数据:

注意:

  在我们查数据的时候会定义一个vo层的实体里,在里面我们要定义一个跟集合类(private LIst<Asd>  ass 这里Asd是这个类的类名)这个作用就是把循环出来的数据封装到上一级里面。

  当我们查完一级要查下一级时都要调用sql方法查出数据库的数据(当我们查市时sql方法写在省封装的循环里)。

  循环的时候注意下一级的数据要循环上一级查出的数据。

   先根据pid查询出id,在把这个id作为父查询中id 的列表中id=子查询查出的id的值来查询出china表中的所有数据

 sql语句:SELECT * FROM china WHERE id in (SELECT id FROM china WHERE pid=?1(根据pid查出id)

   代码如下

vo层的实体类;

package com.cy.coo.vo;

import java.util.List;

import com.cy.coo.entity.City;

public class Asd {
    private Integer id;
    private String name;
    //上一层
    private List<Asd> ass; 


    public List<Asd> getAss() {
        return ass;
    }

    public void setAss(List<Asd> ass) {
        this.ass = ass;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

实现代码:

package com.cy.coo.Controller;

import java.util.ArrayList;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.cy.coo.Repository.CityRepository;
import com.cy.coo.entity.City;
import com.cy.coo.vo.Asd;

import com.cy.coo.vo.Coding;

@RestController
public class CityController {
    @Autowired
    private CityRepository cityRepository;

    @PostMapping("/city")
    public List<Asd> get(@RequestBody Coding aa) {
        // 这里pd可以随便定义啥子
        // Integer pd = null;
        // pd = aa.getPid();
        // List<S> s=new ArrayList<>();
        // ss(lc, asd);
         //返回ss方法 ()里的是 Coding传过来的值
        return ss(aa.getPid());

    }
      //Integer pid Coding 传递过来的数据随便起的一个名字让它得到传过来的值
    private List<Asd> ss(Integer pid) {
        // 查出省的数据
        List<City> lc = cityRepository.findName(pid);
        // 定义的一个集合
        List<Asd> asd = new ArrayList<>();
        // TODO Auto-generatefor(City city : lc){
        for (City city : lc) {
            // 封装的省的数据
            Asd as = new Asd();
            as.setName(city.getName());
            as.setId(city.getId());
            // 这是查出的每一个省下面的每一个市(List<City>这个是Asd中所定义的省所套的下一层)
            List<City> findName = cityRepository.findName(city.getId());
            // 这是新建的一个集合
            List<Asd> list = new ArrayList<>();
            for (City c : findName) {
                // 封装的一个市的数据(循环开始会是每一个的)
                Asd as2 = new Asd();
                as2.setId(c.getId());
                as2.setName(c.getName());
                // 因为有很多的数据所以要放进集合里面
                list.add(as2);
                List<City> findName2 = cityRepository.findName(c.getId());
                List<Asd> list2 = new ArrayList<>();
                
                for(City distinguish : findName2){
                    //封装的区的数据
                    Asd as3 =new Asd();
                    as3.setId(distinguish.getId());
                    as3.setName(distinguish.getName());
                    list2.add(as3);
                }
                //把得到的集合封装到上一层里
                as2.setAss(list2);
            }
            as.setAss(list);
            asd.add(as);
        }
        return asd;
    }
}
原文地址:https://www.cnblogs.com/lihaiyang123/p/7647966.html