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

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.rhkb.cn/news/375593.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python进阶(5):魔术方法篇(1)

之前使用的__init__ 构造方法&#xff0c;是Python类内置的方法之一。 这些内置的类方法&#xff0c;各自有各自特殊的功能&#xff0c;这些内置方法我们称之为&#xff1a;魔术方法 1 __str__ 字符串方法 class Student:name Noneage Nonetel Nonedef __init__(self,name…

shell脚本之if/case语句

一、条件测试 1、1 返回码 $? $? :返回码&#xff0c;用来判断命令或者脚本是否执行成功。 0 &#xff1a;表示true &#xff0c;成功&#xff1b;非0 则表示flase &#xff0c;失败。 1、2 test命令 可以进行条件测试&#xff0c;然后根据返回值来判断条件是否成立 -e…

Redis基础教程(十五):Redis GEO地理信息查询与管理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

怎么提高音频的播放速度?可以提高音频播放速度的四种方法推荐

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是一种有效的策略&#xff0c;可以显著节省时间和提升信息获取的效率。随着信息量不断增加和学习需求的多样化&#xff0c;快速播放音频已成为许多人在日常生活和工作中的常见做法。这种方法不仅可以用于提高学习效率&…

Git-Unity项目版本管理

目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理&#xff0c;并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…

全志A527 T527 android13支持usb摄像头

1.前言 我们发现usb摄像头在A527 android13上面并不能正常使用,需要支持相关的摄像头。 2.系统节点查看 我们查看系统是否有相关的节点生成,发现/dev/video相关的节点已经生成了。并没有问题,拔插正常。 3.这里我们需要查看系统层是否支持相关的相机, 我们使用命令进行…

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…

警钟!电池储能安全事故频发!物联网技术如何加强储能安全排查?

在新能源时代背景下&#xff0c;储能系统作为能源转型的关键支撑技术&#xff0c;其安全问题日益凸显&#xff0c;尤其是近期海外电池项目连续发生的事故&#xff0c;为全球储能行业敲响了警钟。面对这一挑战&#xff0c;物联网技术以其强大的数据采集、智能分析与远程监控能力…

【计算机组成原理 | 第二篇】计算机硬件架构的发展

目录 前言&#xff1a; 冯诺依曼计算机架构 现代计算机架构&#xff1a; 总结&#xff1a; 前言&#xff1a; 在当今数字化时代&#xff0c;计算机硬件不仅是技术进步的见证者&#xff0c;更是推动这一进步的基石。它们构成了我们日常生活中不可或缺的数字生态系统的核心&a…

4. 小迪安全v2023笔记 javaEE应用

4. 小迪安全v2023笔记 javaEE应用 ​ 大体上跟随小迪安全的课程&#xff0c;本意是记录自己的学习历程&#xff0c;不能说是完全原创吧&#xff0c;大家可以关注一下小迪安全。 若有冒犯&#xff0c;麻烦私信移除。 默认有java基础。 文章目录 4. 小迪安全v2023笔记 javaEE应…

C++程序进阶学习

目录 引言 C内存分区 一、内存分区模型 二、 程序运行前 三、程序执行后 C引用 引用的语法 作用 本质 优点 C封装 C对象特性 C对象模型和this指针 C友元 C运算符重载 C继承 C多态 C文件 引言 看过我博客的朋友可能都了解这篇文章内容了&#xff0c;这篇博…

谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码

文章目录 一&#xff0c;使用逆向工程步骤梳理1&#xff0c;修改逆向工程的application.yml配置2&#xff0c;修改逆向工程的generator.properties配置3&#xff0c;以Debug模式启动逆向工程4&#xff0c;使用逆向工程生成代码5&#xff0c;整合生成的代码到对应的模块中 二&am…

FastAPI 学习之路(三十五)项目结构优化

之前我们创建的文件都是在一个目录中&#xff0c;但是在我们的实际开发中&#xff0c;肯定不能这样设计&#xff0c;那么我们去创建一个目录&#xff0c;叫models&#xff0c;大致如下。 主要目录是&#xff1a; __init__.py 是一个空文件&#xff0c;说明models是一个package…

2.GAP:通用访问协议

GAP的简单理解 GAP这个名字&#xff0c;直接翻译过来不好理解。 简单点可以理解为&#xff1a; 这是蓝牙设备在互联之前&#xff0c;过程中&#xff0c;第一个用于交流的协议。在代码上&#xff0c;会给这个协议实现&#xff0c;连接参数的设置&#xff0c;连接事件的实现&am…

maven高级1——一个项目拆成多个

把原来一个项目&#xff0c;拆成多个项目。 &#xff01;&#xff01;他们之间&#xff0c;靠接口通信。 以ssm整合好的项目为例&#xff1a; 如何看拆的ok不ok 只要compile通过就ok。 拆分pojo 先新建一个项目模块&#xff0c;再把内容复制进去。 拆分dao 1.和上面一样…

Unity之Text组件换行\n没有实现+动态中英互换

前因&#xff1a;文本中的换行 \n没有换行而是打印出来了&#xff0c;解决方式 因为unity会默认把\n替换成\\n 面板中使用富文本这个选项啊 没有用 m_text.text m_text.text.Replace("\\n", "\n"); ###动态中英文互译 using System.Collections; using…

牛客小白月赛98

骰子魔术 jackle 会拿出一枚骰子&#xff0c;骰子的表面分别写上了从 1∽5001\backsim 5001∽500 的数字&#xff0c;朋友会随便说一个 1∽5001\backsim 5001∽500 之间的点数&#xff0c;jackle 都能保证百分之百的掷出这个点数。 当然 jackle 有备而来&#xff0c;他准备了 …

代码随想录算法训练营Day62|冗余连接、冗余连接II

冗余连接 108. 冗余连接 (kamacoder.com) 考虑使用并查集&#xff0c;逐次将s、t加入并查集中&#xff0c;当发现并查集中find(u)和find(v)相同时&#xff0c;输出u和v&#xff0c;表示删除的边即可。 #include <iostream> #include <vector> using namespace s…

pytest使用报错(以及解决pytest所谓的“抑制print输出”)

1. 测试类的类名问题 #codingutf-8import pytestclass TestClass1:def setup(self) -> None:print(setup)def test_01(self) -> None:print(test_01111111111111111111111)def test_02(self) -> None:print(test_02)以上述代码为例&#xff0c;如果类名是Test开头&am…

maven7——(重要,构建项目)maven项目构建(命令)

Maven的常用命令管理项目的生命周期 clean命令 清除编译产生的target文件夹内容&#xff0c;可以配合相应命令在cmd中使用&#xff0c;如mvn clean package&#xff0c; mvn clean test D:\工作\公司培训-4班\day20\day20\untitled1>mvn clean compile命令 该命令可以…