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

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.mzph.cn/bicheng/45561.shtml

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

相关文章

Mac VSCode 突然闪退、崩溃、打不开了

vscode 1.90.2版本下载&#xff0c;刚上传还在审核中 1、 思路历程 VSCode 作为前端常用开发工具&#xff0c;其重要性就不一一描述了。 所以 VSCode 突然打不开了&#xff0c;真的是让我一脸懵逼。 本来以为问题不大&#xff0c;于是 &#xff1a; 1、重启了一下VSCode 2、…

【C语言】实践:贪吃蛇小游戏(附源码)

欢迎光顾我的homepage 前言 贪吃蛇小游戏想必大家都玩过吧&#xff0c;现在就要C语言代码来实现一下贪吃蛇小游戏 在实现之前&#xff0c;我们要对C语言结构体、指针、链表(单链表)有一定的基础 先来看一下预期运行效果 一、Win32 API 这里实现贪吃蛇游戏会使用一些Win32 AP…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…

权力之望账号怎么注册 权力之望注册游戏账号教程

不会吧不会吧&#xff0c;这款新的MMORPG游戏&#xff0c;权力之望&#xff0c;马上就要上线啦。支援PC 及行动装置跨平台游玩的MMORPG《权力之望》以Unity 引擎研发&#xff0c;利用动态捕捉、3D 扫描技术呈现细腻的游戏画面。本作主打高自由度的武器选择成长与后续的战斗类型…

分割——半自动打标签工具ISAT详细安装及使用教程

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

目录 C语言中的数组&#xff1a;掌握数据的有序集合【一维数组&#xff0c;二维数组&#xff0c;字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化&#xff1a;部分初始化&#xff1a;字符数组的初始化&#xff1a;自动初始化为0&#xff1a;使用memset函数初始化…

[C++]初识C++(命名空间,命名空间使用,函数重载,缺省参数等)

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

c++之类和对象上

目录 1. 类的定义 2. 访问限定符 3. 类域 4. 实例化 5. 对象的大小 6. 为什么要内存对齐 7. this指针 1. 类的定义 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省 略。类体中内容称为类的…

(篇一)走进FreeRtos—认识FreeRtos

【温故知新篇】 【在现在的工作中一直在使用FreeRtos&#xff0c;但是对它的了解还是不够深入&#xff0c;现在由浅入深&#xff0c;分模块学习和记录&#xff0c;最后将自己基于FreeRtos开发项目实践】 首先我们将这个系统当作一座庄园&#xff0c;开始第一步走进庄园&#…

【备战秋招】——算法题目训练和总结day4

【备战秋招】——算法题目训练和总结day4&#x1f60e; 前言&#x1f64c;Fibonacci数列我的题解思路分享代码分享 单词搜索我的题解思路分享代码分享 杨辉三角我的题解思路分享代码分享 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢…

ubuntu重装系统后,安装cuda,cudnn

一、 先安装驱动&#xff0c;如果驱动安装不成功&#xff0c;会影响桌面&#xff0c;再重装系统还来得及&#xff0c;尝试了很多方法&#xff0c;还是用系统安装最靠谱&#xff1a; 首先进入Ubuntu搜索栏目&#xff0c;找到软件更新器的一个图标&#xff0c;点开之后是这样的。…

开发个人Ollama-Chat--5 模型管理 (二)

开发个人Ollama-Chat–5 模型管理 (二) ChatGPT 这是该项目的最终效果&#xff0c;使用ollama的open-webui进行人与机器的对话功能&#xff0c;对话的后端服务则完全对接自己开发的Go项目。 如何实现呢&#xff1f;则通过这篇文章&#xff0c;一一给大家剖析后端的原理及功能…

mmaction2的GPU环境配置记录RTX3090,cuda12.2,ubuntu22.04版本

1、配置镜像源 最重要的一个步骤,先看下镜像源地址,如果镜像源有问题,所有的包安装都会有问题 镜像源地址获取地址:选择对应的ubuntu版本号,将里面的镜像源地址复制出来,更新到服务器 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirro…

牛客小白月赛98

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

LeetCode分发糖果(贪心思路分析)

题目描述 贪心思路 思路及解法 我们可以将「相邻的孩子中&#xff0c;评分高的孩子必须获得更多的糖果」这句话拆分为两个规则&#xff0c;分别处理。 左规则&#xff1a;当 ratings[i−1]<ratings[i] 时&#xff0c;i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。 …

实现win10多用户同时远程连接登陆(详细实验步骤版)

目录 目的环境实验步骤&#xff08;在需要被远程的win10上&#xff09;1. 开启远程桌面服务2. 编辑组策略实现多用户登录3. 安装RDPWrap实现多用户同时登录 测试 目的 默认情况下&#xff0c;win10 专业版只支持本地或远程只能同时存在一个连接。windows server支持多连接。 比…

【unity笔记】十、Obi绳索插件使用

一. 创建绳索 1.1 新建蓝图 在Assets中右键选择创建->Obi->Rope Blueprint&#xff0c;其属性如图所示 1.2 Obi solver 在场景下创建一个obi solver对象&#xff0c;在该对象下再创建Obi Rope对象。 随后将蓝图拖到Obi Rope对象下的Obi Rope组件&#xff0c;即可看到…

MES系统与其他系统的集成:提升制造业智能化的关键路径

在当今高度竞争的制造业环境中&#xff0c;企业对于生产效率、质量控制、资源优化以及快速响应市场变化的需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接企业计划层与车间控制层的重要桥梁&#xff0c;其在提升生产透明度和优化生产流程方面发挥着不可替代的作…

【SQL】如何用SQL写透视表

【背景】 报表中有一大需求是透视表,目前有很多分析类应用也搭载了此类功能,那么我们能不能直接用SQL做透视表呢? 【分析】 BI类软件将透视表功能做在了前端,但是数据本身还是存储在数据库中,所以必然有方法可以用SQL直接实现透视表。 【心法】 透视表是任意选取一个…

2024最新6月泛二级域名秒收泛目录(二级域名泛站群)

5月免费版本无后台 无更新功能不自动引蜘蛛 2024年5月最新泛程序&#xff0c;秒收秒排&#xff01;&#xff08;泛型程序&#xff09; - 虚良SEO博客 新曾功能&#xff1a; 后台管理 蜘蛛统计 域名添加 一键强引蜘蛛 蜘蛛统计 识别真假蜘蛛 全自动引蜘蛛 域名要求 …