我用循环来做的,一层套着一层,先查出省的数据,在根据省查市的数据,在根据市查区的数据:
注意:
在我们查数据的时候会定义一个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; } }