省市县下拉框的逻辑以及多表联查的实例

news/2024/9/11 0:29:42/ 标签: mysql, 省市县逻辑开发

2024.7.12

  • 一. 省市县的逻辑开发。
    • 1、准备:
      • 1.1. 要求:
      • 1.2 数据库表:
    • 2. 逻辑:
    • 3. 方法
      • 3.1 创建实体类
      • 3.2 数据访问层
      • 3.3 实现递归方法
      • 3.4 控制器实现
      • 3.5 前端处理
  • 二、多表联查(给我干红温了)
    • 1. 出现了问题
    • 2 sql语句的书写
    • 3 mapper.xml 中:
    • 4 解决前面报的错:

一. 省市县的逻辑开发。

1、准备:

1.1. 要求:

做一个选择省市县的开发:
在这里插入图片描述

1.2 数据库表:

在这里插入图片描述

2. 逻辑:

首先根据这张表,证明,我们所有的数据都将放到这张表里面,包含省市县。但有上级行政区划这一个字段,证明我们需要通过这个字段来判断,他的等级。(如:没有上级行政区划,则为省,有一级为市,有两级为县)根据这个去进行操作。

3. 方法

1.通过自连接的方式来进行查询全部表,然后就能获得分级的表,然后返回数据。
2.根据code直接查询出全部的表进行逻辑操作,通过递归,构造树形结构(超级厉害)
所以我们直接介绍第二种:

3.1 创建实体类

首先,你可能需要修改 Area 实体类,以便于支持递归结构。添加一个 children 属性来存储子节点:

package com.example.demo.model;import java.util.ArrayList;
import java.util.List;public class Area {private String code; // 行政区划编码private String name; // 行政区划名称private String parentCode; // 上级行政区划编码private List<Area> children = new ArrayList<>(); // 子级行政区划列表// Getters and Setters
}

3.2 数据访问层

在数据访问层中,提供一个方法来根据父级编码获取所有子级数据:

package com.example.demo.repository;import com.example.demo.model.Area;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;public interface AreaRepository extends JpaRepository<Area, String> {List<Area> findByParentCode(String parentCode);
}

3.3 实现递归方法

在服务层中实现递归方法来构建完整的层级结构:

package com.example.demo.service;import com.example.demo.model.Area;
import com.example.demo.repository.AreaRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;@Service
public class AreaService {@Autowiredprivate AreaRepository areaRepository;// 递归方法来构建层级结构public List<Area> getAllAreas() {List<Area> allAreas = areaRepository.findAll();return buildHierarchy(allAreas, null);}// 构建层级结构的方法private List<Area> buildHierarchy(List<Area> allAreas, String parentCode) {List<Area> result = new ArrayList<>();for (Area area : allAreas) {if ((parentCode == null && area.getParentCode() == null) || (parentCode != null && parentCode.equals(area.getParentCode()))) {// 找到子级,递归构建子级树area.setChildren(buildHierarchy(allAreas, area.getCode()));result.add(area);}}return result;}
}

3.4 控制器实现

在控制器中调用服务层的方法,并返回构建好的层级结构数据:

package com.example.demo.controller;import com.example.demo.model.Area;
import com.example.demo.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;@RestController
@RequestMapping("/api/areas")
public class AreaController {@Autowiredprivate AreaService areaService;@GetMappingpublic List<Area> getAllAreas() {return areaService.getAllAreas();}
}

3.5 前端处理

前端接收到的数据将是一个嵌套的树形结构,你可以用来构建下拉框或其他需要显示层级结构的控件。例如,使用 JavaScript 来处理并渲染树形结构数据:

// 假设你使用 jQuery
$(document).ready(function() {$.get('/api/areas', function(data) {// 处理和渲染树形结构renderTree(data);});
});function renderTree(data) {// 递归渲染树形结构function renderNode(node) {let html = '<option value="' + node.code + '">' + node.name + '</option>';if (node.children && node.children.length > 0) {node.children.forEach(child => {html += renderNode(child);});}return html;}let html = '<select>' + data.map(renderNode).join('') + '</select>';$('#treeContainer').html(html);
}

二、多表联查(给我干红温了)

1. 出现了问题

在我写sql的时候,开始对应着每个表之间对应的字段开始写join on语句,但还是查不出数据,原来,我们需要保证我们的每个字段都有数据,才会返回查询, 所以我去修改我需要表的数据,发现是公共表,我他们写入数据不一致,导致的,这就是开发的时候用服务器连数据库的弊端,我直接把服务器的表复制到我本地,开始开发。还有,xml里面一直报错:
在这里插入图片描述

2 sql语句的书写

注意: 我们使用join on一定要对应好字段,才能保证数据的一致性。
sql:

SELECT  t1.term_sn,t1.out_term_type_name,t1.om_term_info_id,t3.bill_type,t3.ship_notice_no,t3.ship_time,t4.custom_name,t3.take_address,t3.branch_name,t3.bank_contacts,t3.bank_tel,t4.sales_uid,t1.ship_state,t1.out_region_id,t6.user_name,t1.creat_time
from om_term_info t1join out_term_type t2 on t1.out_term_type_name= t2.namejoin out_term_ship t3 on t1.om_term_info_id=t3.om_term_info_idjoin out_custom_info t4 on  t3.custom_no =t4.custom_nojoin out_region t5 on t1.out_region_id=t5.codejoin  sys_user t6 on t1.user_id=t6.user_id;

3 mapper.xml 中:

我们返回数据的时候,需要定义一个<resultMap,然后注意id和type,对应不好很容易出错。还有就是表字段和属性的对应,要细心。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.hengyin.ship.mapper.HomePageMapper"><resultMap id="HomePageResult" type="com.hengyin.ship.domain.Homepage"><id column="term_sn" property="termSn" jdbcType="VARCHAR"/><result column="out_term_type_name" property="outTermTypeName" jdbcType="VARCHAR"/><result column="om_term_info_id" property="omTermInfoId" jdbcType="BIGINT"/><result column="bill_type" property="billType" jdbcType="VARCHAR"/><result column="ship_notice_no" property="shipNoticeNo" jdbcType="VARCHAR"/><result column="ship_time" property="shipTime" jdbcType="TIMESTAMP"/><result column="custom_name" property="customName" jdbcType="VARCHAR"/><result column="take_address" property="takeAddress" jdbcType="VARCHAR"/><result column="branch_name" property="branchName" jdbcType="VARCHAR"/><result column="bank_contacts" property="bankContacts" jdbcType="VARCHAR"/><result column="bank_tel" property="bankTel" jdbcType="VARCHAR"/><result column="sales_uid" property="salesUid" jdbcType="BIGINT"/><result column="ship_state" property="shipState" jdbcType="BIGINT"/><result column="out_region_id" property="outRegionId" jdbcType="BIGINT"/><result column="user_name" property="userName" jdbcType="VARCHAR"/><result column="creat_time" property="createTime" jdbcType="TIMESTAMP"/></resultMap><!--    <select id="slectHomePage" resultType="com.hengyin.ship.domain.Homepage">--><select id="slectHomePage" resultMap="HomePageResult">SELECT  t1.term_sn, t1.out_term_type_name, t1.om_term_info_id, t3.bill_type,t3.ship_notice_no, t3.ship_time, t4.custom_name, t3.take_address,t3.branch_name, t3.bank_contacts, t3.bank_tel, t4.sales_uid,t1.ship_state, t1.out_region_id, t6.user_name, t1.creat_timeFROM om_term_info t1JOIN out_term_type t2 ON t1.out_term_type_name = t2.nameJOIN out_term_ship t3 ON t1.om_term_info_id = t3.om_term_info_idJOIN out_custom_info t4 ON t3.custom_no = t4.custom_noJOIN out_region t5 ON t1.out_region_id = t5.codeJOIN sys_user t6 ON t1.user_id = t6.user_id;</select>
</mapper>

4 解决前面报的错:

提示我们limit 10的错误 ,我找半天也没找到我哪里写limit10,最有趣的是,我第一次问gpt,他告诉我让我加上limit10,然后还报错,又发给他,他又说我加了limit 10 哈哈哈哈哈哈哈。
最后的原因是我忘记了再controller中我加入了分页查询的工具类导致的,下次要思维活跃一点。


http://www.ppmy.cn/news/1474647.html

相关文章

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B&#xff0c;可以具有B同样的行为的模式。为了对外开放协议&#xff0c;B往往实现了一个接口&#xff0c;A也会去实现接口。但是B是“真正”实现类&#xff0c;A则比较“虚”&#xff0c;他借用了B的方法去实现接口的方法。A…

服务网格新篇章:Eureka与分布式服务网格的协同共舞

服务网格新篇章&#xff1a;Eureka与分布式服务网格的协同共舞 引言 在微服务架构的浪潮中&#xff0c;服务网格&#xff08;Service Mesh&#xff09;技术以其微服务间通信的精细化控制而备受瞩目。Eureka作为Netflix开源的服务发现框架&#xff0c;虽然本身不直接提供服务网…

前端面试题47(在动态控制路由时,如何防止未授权用户访问受保护的页面?)

在Vue中&#xff0c;防止未授权用户访问受保护页面通常涉及到使用路由守卫&#xff08;Route Guards&#xff09;。路由守卫允许你在路由发生改变前或后执行一些逻辑&#xff0c;比如检查用户是否已登录或者有访问某个页面的权限。下面是一些常见的路由守卫类型及其使用方式&am…

C++相关概念和易错语法(19)(继承规则、继承下的构造和析构、函数隐藏)

1.继承规则 继承的本质是复用&#xff0c;是结构上的继承而不是内容上的继承&#xff0c;近似于在子类中声明了父类的成员变量。 &#xff08;1&#xff09;写法&#xff1a;class student : public person 派生类&#xff08;子类&#xff09;&#xff0c;继承方式&…

数据库doris中的tablet底层解析

在Doris中,tablet(数据片)是数据存储和管理的最小单元。理解tablet的底层原理有助于更好地理解Doris的高可用性、负载均衡和查询优化等特性。 Tablet 的概念 Tablet:Tablet是Doris中用于存储数据的最小物理单元。每个tablet通常对应于一个数据分区和一个分桶组合的子集。…

网工内推 | 网络运维、云计算工程师,NP以上认证,平均薪资10K

01 网络运维 &#x1f537;岗位职责 1、至少3年以上的网络运维相关工作经验; 2、熟悉VLAN、STP、OSPF、RIP、BGP等网络技术; 3、熟悉IPsec、SSL等VPN技术; 4、熟悉主流网络安全厂商的各种产品; 5、精通TCP/IP协议&#xff0c;熟悉主流网络产品设备的调试、配置方法: 6、有…

人工智能笔记分享

文章目录 人工智能图灵测试分类分类与聚类的区别&#xff08;重点&#xff09;分类 (Classification)聚类 (Clustering) 特征提取 分类器&#xff08;重点&#xff09;特征提取为什么要进行特征提取&#xff1f;&#xff08;重点&#xff09;分类器 训练集、测试集大小&#x…

Spring Boot与Jenkins的集成

Spring Boot与Jenkins的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 Jenkins作为一个开源的持续集成&#xff08;CI&#xff09;和持续交付…

妙笔生词智能写歌词软件:科技赋能艺术还是冲淡原味?

在当今数字化的时代&#xff0c;科技的触角延伸至艺术创作的各个领域&#xff0c;妙笔生词智能写歌词软件便是其中一个引人瞩目的产物。然而&#xff0c;它的出现引发了一场关于科技与艺术关系的深刻思考&#xff1a;究竟是为艺术创作赋予了新的能量&#xff0c;还是在不经意间…

【NLP】利用 RAG 模分块技术提升文档处理效能

将大型文档划分为较小的部分是一项至关重要但又复杂的任务&#xff0c;它对检索增强生成 (RAG) 系统的性能有重大影响。这些系统旨在通过结合基于检索和基于生成的方法&#xff0c;提高输出的质量和相关性。有效的分块&#xff0c;即将文档拆分为可管理的片段的过程&#xff0c…

【区块链+跨境服务】基于区块链的离岸贸易综合服务平台 | FISCO BCOS应用案例

离岸贸易是一种新型的国际贸易模式&#xff0c;指在一个国家或地区的境内&#xff0c;通过一定的方式&#xff0c;将两个或多个国家或地区 之间的贸易活动&#xff0c;从货物流、资金流和信息流三个方面分离开来&#xff0c;实现货物不经过境内&#xff0c;直接从一个国家或地区…

qt 的表格控件有什么

在Qt中&#xff0c;表格控件主要用于显示和编辑表格数据。以下是Qt中常用的表格控件及其相关信息的详细归纳&#xff1a; QTableWidget 介绍&#xff1a;QTableWidget是Qt框架下的一个表格控件&#xff0c;它是基于QTableView的封装&#xff0c;并提供了更方便的方式来操作和呈…

uboot学习:(二)uboot命令

目录 uboot命令 常见命令 内存操作命令 网络操作命令 EMMC/SD卡操作命令: FAT格式文件系统操作命令: EXT格式文件系统操作命令 NAND操作命令 BOOT操作命令 其他命令 uboot命令 在烧录uboot到板子中后&#xff0c;开机三秒后才会进入系统&#xff0c;在这三秒按enter…

【机器学习】特征选择:精炼数据,提升模型效能

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 特征选择&#xff1a;精炼数据&#xff0c;提升模型效能引言为何进行特征选择&a…

【LeetCode】633. 平方数之和

1. 题目 2. 分析 典型双指针的题了&#xff0c;不知道为啥LeetCode会把这题放到二分类别下&#xff1f; 需要知道math.ceil()是向上取整&#xff1b; 3. 代码 class Solution:def judgeSquareSum(self, c: int) -> bool:upper math.ceil(sqrt(c))print(upper)left, ri…

微信小程序之使用上拉加载实现图片懒加载

在微信小程序中&#xff0c;有2个事件&#xff0c;相信大家都很熟悉 下拉重新加载 上拉加载更多 事件是这么个事件&#xff0c;至于事件触发后干嘛&#xff0c;那就看代码了 首先要在对应得地方xxxxpage.json打开这个 "onReachBottomDistance": 100至于这个值100还是…

SpringSecurity 三更草堂学习笔记

0.简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Spring…

合并pdf的方法,如何合并pdf文件到一个pdf,简单方法

在现代办公和学习中&#xff0c;pdf格式的文件因其跨平台兼容性和安全性得到了广泛应用。然而&#xff0c;有时我们需要将多个pdf文件合并成一个&#xff0c;以便于管理和分享。本文将详细介绍几种合并pdf的方法&#xff0c;帮助读者轻松完成pdf文件的合并工作。 方法一、使用p…

urlib Python爬虫

要使用Python进行爬虫&#xff0c;可以使用Python自带的urllib库。 urllib是Python内置的HTTP请求库&#xff0c;用于发送HTTP请求、处理响应和处理URL编码等任务。它提供了很多方法和函数&#xff0c;可以方便地进行网络数据的获取和处理&#xff0c;因此在Python爬虫中被广泛…

极速目标检测:算法加速的策略与实践

标题&#xff1a;极速目标检测&#xff1a;算法加速的策略与实践 目标检测算法在计算机视觉任务中扮演着重要角色&#xff0c;但其计算成本往往较高。优化目标检测算法的速度&#xff0c;不仅可以提升效率&#xff0c;还能使算法适用于实时系统。本文将深入探讨如何优化目标检…