ElementUi+Springboot+mybatisplus实现级联选择省市县

简介: ElementUi+Springboot+mybatisplus实现级联选择省市县

文章目录

1.数据准备

创建一个表,id是编码,name名称,pid父级的id

CREATE TABLE `chinaMap` (

 `Id` int NOT NULL,

 `Name` varchar(40) DEFAULT NULL,

 `Pid` int DEFAULT NULL,

 PRIMARY KEY (`Id`),

 KEY `FK_chinaMap_REFERENCE_chinaMap` (`Pid`),

 CONSTRAINT `FK_chinaMap_REFERENCE_chinaMap` FOREIGN KEY (`Pid`) REFERENCES `chinaMap` (`Id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

文件的话,可以下载下,插入语句就在多说了。

2.后台java实现

后台使用Springboot+mybatisplus

实体类

@Data

@EqualsAndHashCode(callSuper = false)

@TableName("`chinaMap`")

public class ChinaMap implements Serializable {

   private static final long serialVersionUID = 1L;

   /**

    * 行政区划

    */

   @TableId(value = "Id", type = IdType.AUTO)

   private Integer Id;

   /**

    * 名字

    */

   @TableField(value = "Name")

   private String Name;

   /**

    * 父级Id

    */

   @TableField(value = "PId")

   private Integer PId;

}

mapper类

@Mapper

public interface MapMapper extends BaseMapper<ChinaMap> {

   @Select("SELECT Id, Name, Pid FROM test.chinaMap where Pid=#{pid}")

   List<ChinaMap> getMapListByPid(Integer pid);

}

controller 类

@RestController

@RequestMapping("/springboot/map")

@Slf4j

public class MapController {

   @Resource

   IMapService mapService;

   @GetMapping("/getMapList/{Pid}")

   public List<ChinaMap> getMapList(@PathVariable("Pid")Integer Pid){

       return mapService.getMapListByPid(Pid);

   }

   /**

    * 获取tree

    * @return

    */

   @GetMapping("/getMapTreeList")

   public List<MapTree> getMapTreeList(){

       return mapService.getMapTreeList();

   }

}

service接口

@Service

public interface IMapService extends IService<ChinaMap> {

   List<ChinaMap> getMapListByPid(Integer pid);

   List<MapTree> getMapTreeList();

}

1.第一种方式使用,选择省份触发获取城市实现

@Service

public class IMapServiceImpl extends ServiceImpl<MapMapper, ChinaMap> implements IMapService {

   @Autowired

   MapMapper mapMapper;

   /**

    * 根据ID获取树

    * @param pid

    * @return

    */

   @Override

   public List<ChinaMap> getMapListByPid(Integer pid) {

       return mapMapper.getMapListByPid(pid);

   }

}


2.直接构造树形结构

vo类

@Data

@Accessors(chain = true)

public class MapTree {

  private Integer Id;

  private String Name;

  private Integer PId;

  //树形结构

  private List<MapTree> children;

}

手动构造树形结构

List<MapTree> mapTrees = new ArrayList<>();

      //顶级

      MapTree mapTree = new MapTree();

      mapTree.setId(0);

      mapTree.setName("中国");

      //查询所有的省份

      List<ChinaMap> provinceMaps = mapMapper.getMapListByPid(0);

      List<MapTree> provinces = new ArrayList<>();

      for(ChinaMap pro :provinceMaps){

          //遍历所有的省份下的市级城市

          MapTree province = new MapTree();

          province.setId(pro.getId());

          province.setName(pro.getName());

          province.setPId(0);

          List<ChinaMap> cityMaps = mapMapper.getMapListByPid(pro.getId());

          List<MapTree> citys =  new ArrayList<>();

          for (ChinaMap c:cityMaps){

              MapTree city = new MapTree();

              city.setId(c.getId());

              city.setName(c.getName());

              city.setPId(pro.getId());

              List<ChinaMap> cuntys = mapMapper.getMapListByPid(c.getId());

              List<MapTree> countys =  new ArrayList<>();

              for(ChinaMap cty: cuntys){

                  countys.add(new MapTree().setName(cty.getName()).setId(cty.getId()).setPId(c.getId()));

              }

              city.setChildren(countys);

              citys.add(city);

          }

          province.setChildren(citys);

          provinces.add(province);

      }

      mapTree.setChildren(provinces);

      mapTrees.add(mapTree);

      return mapTrees;

  }

3.前端页面

分别使用select选择器和级联选择器实现。

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <title>级联选择</title>

</head>

<!--script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script-->

<!--引入静态的路径-->

<script type="text/javascript" src="js/vue.min.js"></script>

<!--script src="https://unpkg.com/element-ui/lib/index.js"></script-->

<script type="text/javascript" src="js/index.js"></script>

<!-- 引入样式 -->

<!--link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"-->

<link rel="stylesheet" href="css/index.css">

<!-- 引入组件库 -->

<!--引入通信框架-->

<!--script src="https://unpkg.com/axios/dist/axios.min.js"></script-->

<script type="text/javascript" src="js/axios.min.js"></script>

<body>

<div id="app">

   <h1 style="background-color: #409EFF;text-align: center;">级联选择</h1>

   <template>

       <!--块状选择-->

      <el-cascader-panel class="el-cascader-panel" :options="options" :props="{ value: 'id',label: 'name',children: 'children'}"></el-cascader-panel>

       <el-form ref="form"  label-width="80px" size="mini">

           <el-form-item label="选择地址">

               <el-select clearable v-model="form.province"  placeholder="请选择省份" @change="provinceChange($event)">

                   <el-option v-for="(item,index) in form.provinceList" :key="item.id"  :label="item.name" :value="item.id"></el-option>

               </el-select>

               <el-select clearable  v-model="form.city"  placeholder="请选择城市" @change="cityChange($event)">

                   <el-option v-for="(item,index) in form.cityList" :key="item.id" :label="item.name" :value="item.id"></el-option>

               </el-select>

               <el-select  clearable v-model="form.county"  value-key="" placeholder="请选择区县">

                   <el-option v-for="(item,index) in form.countyList" :key="item.id"  :label="item.name" :value="item.id"></el-option>

               </el-select>

           </el-form-item>

       </el-form>

   </template>

</div>

</body>

</html>

<script>

   new Vue({

       el: "#app",

       //数据

       data() {

           return {

               options:[],//树形结构选择

               form:{

                   province:"",//选择的省

                   city:"", //城市

                   county:"",//区县

                   provinceList:[],//省份的list

                   cityList:[],//城市列表

                   countyList:[] //区县列表

               }

           };

       },

       //创建之前

       created() {

       },

       //初始化加载数据

       mounted() {

           //初始化加载商品数据

           this.getProvinceList();

           //加载树形结构

           this.getMapTreeList();

       },

       methods: {

           provinceChange(event){

               console.log(event);

               axios.get("/springboot/map/getMapList/"+event).then((res => {

                   console.log(res);

                   //绑定表格数据

                   if (res.status === 200) {

                       this.form.cityList = res.data

                   }

               }));

           },

           cityChange(event){

               console.log(event);

               axios.get("/springboot/map/getMapList/"+event).then((res => {

                   //绑定表格数据

                   if (res.status === 200) {

                       this.form.countyList = res.data

                   }

               }));

           },

           //获取省份列表

           getProvinceList(){

               axios.get("/springboot/map/getMapList/0").then((res => {

                   console.log(res);

                   //绑定表格数据

                   if (res.status === 200) {

                       this.form.provinceList = res.data

                   }

               }));

           },

           //获取树形结构列表

           getMapTreeList(){

               axios.get("/springboot/map/getMapTreeList").then((res => {

                   console.log(res);

                   //绑定表格数据

                   if (res.status === 200) {

                       this.options = res.data

                   }

               }));

           }

       }

   });

</script>

<style scoped>

</style>

4.效果

a1d4e0f84b8d46379c2e48552b2b6507.png

5.总结

现在用的是存在数据库的数据,可以使用现成的api调用查询来实现。

相关文章
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
547 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
168 1
|
2月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
173 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
3月前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
3月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
4月前
|
JavaScript
SpringBoot+Vue+ElementUI 实现视频播放 轮播图效果
这篇文章介绍了如何在SpringBoot+Vue+ElementUI项目中使用vue-awesome-swiper插件实现视频播放轮播图效果,包括安装插件、引入项目和使用案例的步骤。
SpringBoot+Vue+ElementUI 实现视频播放 轮播图效果
|
3月前
|
前端开发 JavaScript Java
技术分享:使用Spring Boot3.3与MyBatis-Plus联合实现多层次树结构的异步加载策略
在现代Web开发中,处理多层次树形结构数据是一项常见且重要的任务。这些结构广泛应用于分类管理、组织结构、权限管理等场景。为了提升用户体验和系统性能,采用异步加载策略来动态加载树形结构的各个层级变得尤为重要。本文将详细介绍如何使用Spring Boot3.3与MyBatis-Plus联合实现这一功能。
142 2
|
4月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
357 1
|
4月前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。
|
4月前
|
数据库
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
这篇文章介绍了如何在基于SpringBoot+Vue+MybatisPlus的项目中使用elementUI的dialog组件进行用户信息的添加和删除操作,包括弹窗表单的设置、信息提交、数据库操作以及删除前的信息提示和确认。
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)