数据库动态加载省市区信息,实现三级联动

2023-11-05

本文转载自:http://my.oschina.net/zhengweishan/blog/402483

摘要
动态的从数据库加载全国省市区,后台使用的是SpringMvc,前台使用的是bootstrap页面展示。demo源码下载地址:https://git.oschina.net/zhengweishan/GetProvinceCityArea​

demo源码下载地址:https://git.oschina.net/zhengweishan/GetProvinceCityArea

首先声明一下,全国省市区三级联动有很多的插件。没有必要这么麻烦的把省市区存到数据库,然后再获取。这样缺点很明显:

缺点:使用数据库,每次动态ajax获取数据都要操作一次数据库,增加了数据库的负担。不推荐这样做,直接使用插件比较好。

一些Jquery插件比较省时省力,不用来回操作数据库,就能达到你想要的效果,页面修饰就要自己设计咯。而且使用数据库你还要事先把省市区数据存到数据库,耗费精力,及时有一些现成的sql文件可以导入。但是感觉好麻烦有没有,博主算是试了一次。

好了说了很多废话,开始上代码吧:

页面展示主要代码:

                  

  <div class="form-group has-success col-md-4">
                        <label for="provinceId">选择省份:</label>
                        <select data-placeholder="省份" id="provinceId" name="province" class="form-control"
                                data-rel="chosen">
                            <c:if test="${!empty provinceList}">
                                <c:forEach items="${provinceList}" var="province">
                                    <option value="${province.provinceid}">${province.province}</option>
                                </c:forEach>
                            </c:if>
                        </select>
                    </div>
                    <div class="form-group has-success col-md-4">
                        <label for="cityId">选择城市:</label>
                        <select data-placeholder="城市" name="city" id="cityId" class="form-control" data-rel="chosen">
                            <option>选择城市</option>
                        </select>
                    </div>
                    <div class="form-group has-success col-md-4" >
                        <label for="areaId">选择区域:</label>
                        <select data-placeholder="区域" name="area" id="areaId" class="form-control" data-rel="chosen">
                            <option>选择区域</option>
                        </select>
                    </div>

页面效果图:



页面js代码:

<script type="text/javascript">
    /*页面加载就开始执行js*/
    $(document).ready(function () {
        $("#provinceId").change(function () {
            $.get("getCityByProvinceId/"+$("#provinceId").val(),function(data){
                if(data.status){
                    var result = "<option>选择城市</option>";
                    $.each(data.obj,function(n,value){
                        result +="<option value='"+value.cityid+"'>"+value.city+"</option>";
                    });
                    $("#cityId").html('');
                    $("#cityId").append(result);
                }
            },"json");
        });
        $("#cityId").change(function () {
            $.get("getAreaByCityId/"+$("#cityId").val(),function(data){
                if(data.status){
                    var result = "<option>选择区域</option>";
                    $.each(data.obj,function(n,value){
                        result +="<option value='"+value.areaid+"'>"+value.area+"</option>";
                    });
                    $("#areaId").html('');
                    $("#areaId").append(result);
                }
            },"json");
        });
    });
</script>

后台接收数据的代码:

    

//获取所有的省份信息并传到前台
    @RequestMapping(value = "/schoolAddInput")
    public String addInput(ModelMap map) {
        map.addAttribute("provinceList", cityService.getAllProvince());
        return "school/addInput";
    }
    //    根据省份id获取城市数据后直接使用@ResponseBody装成json数据
    @RequestMapping(value = "/getCityByProvinceId/{id}")
    @ResponseBody
    public Json getCityByProvinceId(@PathVariable("id"String id){
        List<City> cityList = cityService.getCityByProvinceId(id);
        if (cityList!=null){
            return new Json(true,"success",cityList);
        } else {
            return new Json(false,"fail",null);
        }
    }
    //    根据城市id获取区域数据后直接使用@ResponseBody装成json数据
    @RequestMapping(value = "/getAreaByCityId/{id}")
    @ResponseBody
    public Json getAreaByCityId(@PathVariable("id"String id){
        List<Area> areaList = cityService.getAreaByCityId(id);
        if (areaList!=null){
            return new Json(true,"success",areaList);
        } else {
            return new Json(false,"fail",null);
        }
    }

服务层代码:

@Service
public class CityService {
    @Inject
    private CityDao cityDao;
    @Inject
    private ProvinceDao provinceDao;
    @Inject
    private AreaDao areaDao;
    public List<Province> getAllProvince() {
        return provinceDao.list();
    }
    public List<City> getCityByProvinceId(String id) {
        return cityDao.getCityByProvinceId(id);
    }
    public List<Area> getAreaByCityId(String id) {
        return areaDao.getAreaByCityId(id);
    }
}

DAO层代码不用说你们猜也能猜到吧(*^__^*) …… 简单的查询语句。数据库持久层我使用的是mybatis框架分享其中的一个mapper文件 CityDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hyt.dao.CityDao" >
  <resultMap id="BaseResultMap" type="com.hyt.domain.City" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="cityID" property="cityid" jdbcType="VARCHAR" />
    <result column="city" property="city" jdbcType="VARCHAR" />
    <result column="father" property="father" jdbcType="VARCHAR" />
  </resultMap>
  <select id="getCityByProvinceId" resultMap="BaseResultMap" parameterType="java.lang.String">
    select * from hat_city where father = #{id,jdbcType=VARCHAR}
  </select>
</mapper>

是不是很简单,的确很简单。但是使用这种获取省市区三级联动,还是不好。直接使用插件多好~大家说是吧,全国省市级三级联动jquery代码自己找度娘吧! 顺便也锻炼下自己的搜寻知识的能力~
全国城市sql文件(mysql版本):(点击就可以获取地址~)

demo源码下载地址:https://git.oschina.net/zhengweishan/GetProvinceCityArea


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库动态加载省市区信息,实现三级联动 的相关文章

  • 【CUDA基础练习】向量内积计算的若干种方法

    先从一个简单 直观的方法来了解如何用CUDA计算向量内积 向量内积既然是将两个向量对应元素相乘的结果再求和 我们先考虑将对应元素相乘并行化 再来考虑相加 方法一 include
  • 十八、kubernetes中容器重启策略

    1 概述 在上一篇文章中 一旦容器探测出现了问题 kubernetes就会对容器所在的Pod进行重启 其实这是由pod的重启策略决定的 pod的重启策略有 3 种 分别如下 Always 容器失效时 自动重启该容器 这也是默认值 OnFai
  • oracle行转列(PIVOT),列转行(UNPIVOT)

    1 行转列 PIVOT 现有 学生 分数表 STUDENT SCORE 如下 想看到每个学生语数外的整体分数情况 这时候可以应用行转列 PIVOT SELECT FROM STUDENT SCORE PIVOT SUM SCORE FOR

随机推荐

  • C++应用到C# ref , out

    include stdafx h include iostream h int factor int int int void main int number squard cubed error cout lt lt Enter the
  • 泰勒展开式求sin(x)

    include
  • Java架构直通车——分布式唯一 ID生成方案

    文章目录 分布式ID的几种生成方案 UUID MySQL主键自增 数据库自增ID改进方案 雪花算法 SnowFlake 雪花算法的优化 Redis自增id Zookeeper有序节点 最近要做区块链项目 要生成很多唯一ID做业务号之类的 所
  • 快速排序算法的Python实现 (头歌实践教学平台)

    任务描述 本关任务 编写代码实现快速排序 相关知识 为了完成本关任务 你需要掌握 1 如何实现快速排序 2 快速排序的算法分析 快速排序 快速排序使用了和归并排序一样的分而治之策略 它的思路是依据一个 基准值 数据项来把列表分为两部分 小于
  • lyapunov优化

    Lyapunov optimization是Michael J Neely发展起来的网络优化理论 可以参考 1 2 因为网络研究中缺乏理论 简单好使的算法 没有高大上的公式吓人 好像就不能发到高级别的期刊上 Lyapunov optimiz
  • 关系型数据库与非关系型数据库的区别

    文章目录 1 关系型数据库 1 1 概念 1 2 优点 1 3 瓶颈 2 从关系型到非关系型 3 非关系型数据库 3 1概念 3 2分类 3 3 缺点 4 对比 4 1 存储上 4 2 事务 4 3 数据集 4 4 结构 1 关系型数据库
  • Ubuntu安装时:downloading language packs

    ubuntu 安装时 问题 downloading language packs 如果网络不好 持续能达到几个小时 解决办法 切断网络连接 安装完后 还可以再安装
  • php模式之装饰器模式1

    原文来自 大胖博客 装饰器模式 也成修饰器模式 目的是给现有的对象增加或修改成新逻辑 说人话就是不改变对象的情况下 给对象的某个操作增加前置操作或者后置操作 当然也有可能改变操作的逻辑 举个栗子 我们在操作数据库的时候会从数据库拉取数据 拉
  • 《shell脚本编写——常用例子》

    目录 1 书写脚本 批量添加用户 2 根据要求判断文件类型 3 根据要求搜集服务器系统信息 4 检测磁盘使用率 5 检测url是否正常 6 防止文件被误删除的脚本 7 shell入侵检测和邮件报警 1 MD5sum校验 2 web目录下文件
  • 信号量和互斥锁有什么区别

    这是概念上的区别 比如说 信号 那是多线程同步用的 一个线程完成了某一个动作就通过信号告诉别的线程 别的线程再进行某些动作 互斥锁 这是多线程互斥用的 比如说 一个线程占用了某一个资源 那么别的线程就无法访问 知道这个线程离开 其他的线程才
  • vue自定义指令 v-debounce 防抖

    vue自定义指令 防抖 使用场景 点击查询按钮 或者 点击提交保存按钮 的时候点击次数过多 会多次提交 为了避免这种情况发生 我们可以做个防抖 点击一次后 第二次需要间隔一定的时间才能再次点击 这时候我们能想到可以用vue 的自定义指令di
  • UE4(Unreal Engine4)虚幻引擎视口布局,并且自定义HDRI

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 操作步骤 1 准备工作 二 操作步骤 1 UE4中创建第三人称游戏 前言 在UE4中搭建电影级场景 先看下效果 一 操作步骤 1 准备工作 1 在UE4 Unreal Engine
  • nodejs全栈开发学习笔记

    为什么学nodejs 因为听说学会了nodejs可以做全栈开发 哈哈 我也是一个有野心的程序员 其实并没有 nodejs学了好几次 也放弃了好几次 主要原因就是感觉莫名其妙 自学 跟前端开发联系不上 光是环境搭建 Windows系统 就卡死
  • opencv中的transpose和flip

    cv flip 的第三个参数 大于0表示沿y轴翻转 等于0表示沿x轴翻转 小于0表示 x和y同时翻转
  • vc文件操作,内存映射

    vc文件操作 内存映射 各种关于文件的操作在程序设计中是十分常见 如果能对其各种操作都了如指掌 就可以根据实际情况找到最佳的解决方案 从而在较短的时间内编写出高效的代码 因而熟练的掌握文件操作是十分重要的 本文将对Visual C 中有关文
  • 浅谈Vue项目优化心得

    1 打包优化 提取组件的 CSS 到单独到文件 屏蔽 sourceMap 开启 gzip 压缩 公共库使用cdn外链 打包vender时不打包vue vuex vue router axios等 换用国内的 bootcdn unpkg 直接
  • 计算方法(三)矩阵分解1-正交分解(QR分解)

    为什么80 的码农都做不了架构师 gt gt gt 正交分解 矩阵的正交分解又称为QR分解 是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式 任意实数方阵A 都能被分解为 这里的Q为正交单位阵 即 R是一个上三角矩阵 这种分解被称为
  • 手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

    文章目录 一 类型 创建型模式 1 1 工厂模式 1 2 单例模式 1 3 建造者模式 二 类型 结构型模式 2 1 适配器模式 2 2 代理模式 2 3 组合模式 2 4 装饰器模式 三 类型 行为型模式 3 1 模板模式 3 2 策略模
  • Unity接入TopOn聚合广告平台SDK【聚合了穿山甲,优量汇(腾讯广告),快手,Mintegral,sigmob等各大广告平台SDK】

    TopOn聚合穿山甲 优量汇 快手 Mintegral各大广告SDK教程 接了好几家SDK 都有亿点点蛋疼 直到遇到了TopOn TopOn的文档和SDK相当齐全 包括Android IOS Unity Cocos2dx CocosCrea
  • 数据库动态加载省市区信息,实现三级联动

    本文转载自 http my oschina net zhengweishan blog 402483 摘要 动态的从数据库加载全国省市区 后台使用的是SpringMvc 前台使用的是bootstrap页面展示 demo源码下载地址 http