简单的三级联动

通过spring data jpa+JQuery实现省、市、县三级联动

一 首先了解数据库

分为三张表,分别存储省、市、县的信息,且每张表通过属性code进行相连。

数据表链接:
https://www.jb51.net/article/49540.htm

在这里插入图片描述在这里插入图片描述在这里插入图片描述

二 使用springdatajpa编写后端代码

我的项目结构如下:
在这里插入图片描述
maven自行添加。

yml配置:

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/city?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: xxx
    type: com.alibaba.druid.pool.DruidDataSource
  jpa:
    hibernate:
      ddl-auto: update #自动更新
    show-sql: true
    database: mysql
  resources:
      static-locations: classpath:/

实体层

package com.dy.city.pojo;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

@Data
@Entity
@Table(name = "city")
public class City  implements Serializable {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id")
	private Integer id;

	@Column(name = "code")
	private String code;

	@Column(name = "name")
	private String name;

	@Column(name = "provincecode")
	private String provincecode;
}
package com.dy.city.pojo;
import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

@Data
@Entity
@Table(name = "province")
public class Province  implements Serializable {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id")
	private Integer id;

	@Column(name = "code")
	private String code;

	@Column(name = "name")
	private String name;

}
package com.dy.city.pojo;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

@Data
@Entity
@Table(name = "town")
public class Town  implements Serializable {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id")
	private Integer id;

	@Column(name = "code")
	private String code;

	@Column(name = "name")
	private String name;

	@Column(name = "citycode")
	private String citycode;

}

DAO层,创建三个Repository接口并继承Jpa

@Repository
public interface ProvinceRepository extends JpaRepository<Province,Integer> {
 //该处不需要自定义方法
}
@Repository
public interface CityRepository extends JpaRepository<City,Integer> {
//根据provincecode获取到city集合
   public List<City> findByProvincecode(String provincecode);
}

@Repository
public interface TownRepository extends JpaRepository<Town,Integer> {
//根据citycode获取到Town集合
   public List<Town> findByCitycode(String citycode);
}

Service 层

package com.dy.city.service;

import com.dy.city.dao.CityRepository;
import com.dy.city.dao.ProvinceRepository;
import com.dy.city.dao.TownRepository;
import com.dy.city.pojo.City;
import com.dy.city.pojo.Province;
import com.dy.city.pojo.Town;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service("linkService")
public class linkService {
    @Autowired
    CityRepository cityRepository;
    @Autowired
    ProvinceRepository provinceRepository;
    @Autowired
    TownRepository townRepository;
   //返回Province集合
    public List<Province> getProvince(){
       return provinceRepository.findAll();
    }

    //返回City集合
    public List<City> getCity(String provinceCode){
        List<City> cityList = cityRepository.findByProvincecode(provinceCode);
       return cityList;
    }
    //返回Town集合
    public List<Town> getTown(String cityCode) {
        List<Town> townList = townRepository.findByCitycode(cityCode);
        return  townList;
    }
}

Controller层

package com.dy.city.controller;

import com.dy.city.pojo.City;
import com.dy.city.pojo.Province;
import com.dy.city.pojo.Town;
import com.dy.city.service.linkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class linkController {
    @Autowired
    linkService linkService;

    //返回Province集合
    @GetMapping("/getProvince")
    public List<Province> getProvince(){
        return linkService.getProvince();
    }

    //返回City集合
    @GetMapping("/getCity/{provincecode}")
    public List<City> getCity(@PathVariable String provincecode){
        return linkService.getCity(provincecode);
    }
    //返回Town集合
    @GetMapping("/getTown/{citycode}")
    public List<Town> getTown(@PathVariable String citycode) {
        return linkService.getTown(citycode);
    }
}
三 通过JQuery实现前端

在项目结构中resources\templates\下创建index.html页面

页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
   籍贯:<select id="province">
    </select>
    <select  id="city">
    </select>
    <select  id="town">
    </select>
</div>
</body>
<script src="../js/jquery-1.8.3.js"></script>
<script>
    $(function() {
       //初始化省市县
        init();
        //二级联动
        $("#province").change(function() {
            var provinceCode = $("#province").val();
            getCity(provinceCode);

        });
        //三级联动
        $("#city").change(function() {
            var cityCode = $("#city").val();
            getArea(cityCode)
        });
        //初始化方法
        function init() {
            var firstProvCode;
            $.ajax({
                url: "/getProvince",
                dataType: "json",
                success: function (data) {
                    var str="";
                    for(var i=0;i<data.length;i++){
                        str += "<option value='" + data[i].code + "'>" + data[i].name + "</option>";
                    }
                    $("#province").append(str);
                    // 获取第一个省份的code
                    firstProvCode = data[0].code;
                    // 根据第一个省份code获取对应城市列表
                    getCity(firstProvCode);
                }
            });
        }
        //二级联动
      function getCity(ProvCode) {
          var firstCityCode;
          $.ajax({
              url: "/getCity/"+ProvCode+"",
              dataType: "json",
              success: function (data) {
                  $("#city").empty();
                  var str="";
                  for(var i=0;i<data.length;i++){
                      str += "<option value='" + data[i].code + "'>" + data[i].name + "</option>";
                  }
                  $("#city").append(str);
                  // 获取第一个城市的code
                  firstCityCode = data[0].code;
                  // 根据第一个城市code获取对应区县列表
                  getArea(firstCityCode);
              }
          });
      }
      //三级联动
        function getArea(CityCode) {
            $.ajax({
                url: "/getTown/"+CityCode+"",
                dataType: "json",
                success: function (data) {
                    $("#town").empty();
                    var str="";
                    for(var i=0;i<data.length;i++){
                        str += "<option value='" + data[i].code + "'>" + data[i].name + "</option>";
                    }
                    $("#town").append(str);
                }
            });
        }
    });
</script>
</html>
四 实现效果

效果图如下:
在这里插入图片描述
到此,简单的三级联动就完成了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值