Spring boot整合jpa Jquery實現三級聯動

Spring boot 整合jpa JQuery 實現省,市,區, 三級聯動效果

三級聯動在很多項目都必不可少,尤其是在付款時,需要選取地址,爲了更好的用戶體驗感,從而出現了三級聯動。

實現三級聯動的方法有很多 看個人思路以及提供條件來 ,一張表和三張表都是有不同的寫法,這裏我們提供的是三個表

先來看看效果

前端實現 JQuery

片描述
這裏是一個初始化界面
在這裏插入圖片描述
當你改變省級下拉框時 同時會改變市區兩級的值 改變市級 區級也會改變
下面來看操作方法

1.idea 創建Spring Initializr 項目

創建開發模式相應的dao / Service / entity /Controller 層
下圖在這裏插入圖片描述
大概demo目錄就是這個樣子
下面給大家把代碼貼上來
實體類

package cn.xiaohe.entity;

import lombok.Data;

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

@Data
@Entity
@Table(name = "t_address_province")
public class TAddressProvince  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 cn.xiaohe.entity;

import lombok.Data;

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

@Data
@Entity
@Table(name = "t_address_city")
public class TAddressCity  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 cn.xiaohe.entity;

import lombok.Data;

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

@Data
@Entity
@Table(name = "t_address_town")
public class TAddressTown  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層

package cn.xiaohe.dao;


import cn.xiaohe.entity.TAddressProvince;
import org.springframework.data.jpa.repository.JpaRepository;

//這邊繼承JpaRepository 使用jpa方法 用於查詢省級
public interface AddressRepository extends JpaRepository<TAddressProvince, Integer> {

}

package cn.xiaohe.dao;

import cn.xiaohe.entity.TAddressCity;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;

import java.util.List;


public interface CityRepository extends JpaRepository<TAddressCity, Integer> {
//這邊自定義方法 用省級的provinceCode 來查詢出市級的信息
    List<TAddressCity> findByProvinceCode(String provinceCode);
}

package cn.xiaohe.dao;

import cn.xiaohe.entity.TAddressCity;
import cn.xiaohe.entity.TAddressTown;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface townRepository extends JpaRepository<TAddressTown, Integer> {
//同樣自定義方法 使用省級CityCode 來查詢出區級信息
    List<TAddressTown> findByCityCode(String CityCode);

}

Service 層

package cn.xiaohe.Service;

import cn.xiaohe.dao.AddressRepository;
import cn.xiaohe.dao.CityRepository;
import cn.xiaohe.dao.townRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.xiaohe.entity.*;

import java.util.List;

@Service
public class AddressService {
        @Autowired
        AddressRepository AddressRepository;

        @Autowired
        CityRepository CityRepository;

        @Autowired
        townRepository townRepository;

		//加載省級信息
        public List<TAddressProvince> findAll(){
           return AddressRepository.findAll();
        }

			//通過省級ProvinceCode 查詢出市級信息
	        public List<TAddressCity> findAlls(String ProvinceCode){
            List<TAddressCity> allById = CityRepository.findByProvinceCode(ProvinceCode);
            return allById;
        }
			//通過市級CityCode 查詢出區級信息
        public  List<TAddressTown> findAllss(String CityCode){
            List<TAddressTown> byCode = townRepository.findByCityCode(CityCode);
            return byCode;
        }

}

Controller層

package cn.xiaohe.Controller;

import cn.xiaohe.Service.AddressService;
import cn.xiaohe.entity.TAddressCity;
import cn.xiaohe.entity.TAddressProvince;
import cn.xiaohe.entity.TAddressTown;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class AddressController {

        @Autowired
        AddressService AddressService;
		//通過 index 跳入 index.html頁面
        @RequestMapping("/index")
        public String index(){
            return "index";
        }


		//加載省級
        @RequestMapping("/select")
        @ResponseBody
        public List<TAddressProvince> findAll(){
            List<TAddressProvince> all = AddressService.findAll();
            return all;
        }

		//加載市級
        @RequestMapping("/selects")
        @ResponseBody
        public List<TAddressCity> findAlls(@RequestParam(value = "provinceCode",required = false,defaultValue = "0")String  provinceCode){
            List<TAddressCity> alls = AddressService.findAlls(provinceCode);
            return alls;
        }

		//加載區級
        @RequestMapping("/selectss")
        @ResponseBody
        public List<TAddressTown> findAllss(@RequestParam(value = "CityCode",required = false,defaultValue = "0")String CityCode){
            List<TAddressTown> allss = AddressService.findAllss(CityCode);
            return allss;
        }
}

templates包下的頁面 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
</head>
<body>
        <select id="bb">
            <option value="0">請選擇</option>
        </select>

        <select id="cc">
            <option value="0">請選擇</option>
        </select>

        <select id="dd">
            <option value="0">請選擇</option>
        </select>
</body>
<script>
	//初始化加載省級信息
    $(function () {
        $.ajax({
            url:"select",
            type:"GET",
            success:function (data) {
                $.each(data,function () {
                    var option = $("<option value='"+this.code+"'>"+this.name+"</option>");
                    option.appendTo("#bb");
                })
            }
        })
    })
    //當變動一級下拉框時 動態獲取一級provinceCode
    $("#bb").change(function(){
       var cc= $("#bb").find("option:selected").val();
      if (cc!=0){
          $("#cc").empty().append("<option value='0'>請選擇</option>");
          $("#dd").empty().append("<option value='0'>請選擇</option>");
          $.ajax({
              url:"selects?provinceCode="+cc,
              type:"GET",
              success:function (result) {
                  $.each(result,function () {
                      var option = $("<option value='"+this.code+"'>"+this.name+"</option>");
                      option.appendTo("#cc");
                  })
              }
          })
      }else{
          $("#cc").empty();
          $("#dd").empty();
          var option = $("<option value='0'>請選擇</option>");
          var option1 = $("<option value='0'>請選擇</option>");
          option1.appendTo("#cc");
          option.appendTo("#dd");
      }
    });
	//當變動二級聯動時  將二級  CityCode傳 三級方法 查出 區級信息
        $("#cc").change(function () {
            var dd = $("#cc").find("option:selected").val();
            if (dd!=0){
                $("#dd").empty();
                $.ajax({
                    url:"selectss?CityCode="+dd,
                    type:"GET",
                    success:function (result) {
                        $.each(result,function () {
                            var option = $("<option value='"+this.code+"'>"+this.name+"</option>");
                            option.appendTo("#dd");
                        })
                    }
                })
            }
        })


</script>
</html>

下面是一個整合jpa的 yml配置文件 修改數據庫 用戶密碼即可

server:
  port: 8081

spring:
  devtools:
    restart:
      enabled: true
  thymeleaf:
    prefix: "classpath:/templates/"
    suffix: ".html"
    cache: false

  datasource:
    username: root
    password: hzy
    url: jdbc:mysql://localhost:3306/threep?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver
  mvc:
    date-format: "yyyy-MM-dd"

  #showSql
  jpa:
    show-sql: true
    database: mysql
    hibernate:
      ddl-auto: update
      naming:
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl #默認的命名策略
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #駝峯命名

數據庫下載連接

如有問題 發至郵箱 [email protected]

發佈了8 篇原創文章 · 獲贊 12 · 訪問量 2829
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章