Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >留言模块,MySQL查询数据问题

留言模块,MySQL查询数据问题

作者头像
张苹果
发布于 2022-09-22 02:17:03
发布于 2022-09-22 02:17:03
1.6K0
举报
文章被收录于专栏:vaevae

记录一下个人在写博客“留言模块”遇到的问题。

由于本想使用一张表完成留言数据的查询,其中包括留言ID和父留言ID字段。通过父留言ID判断名下是否包含子级;最后返回给前端展示。

但在这就遇到了些问题,如果留言包含回复的话,一张表的话就必须全部查询出来,然后再递归排序。但留言数据过多会导致查询速度慢,而且只能前端分页;果断就放弃了这个想法。

看了看百度发现,可以使用两张表,一张留言表,一张留言回复表,通过留言ID,主外键绑定起来。然后嵌套子查询,实现分页查询。

留言表:

留言回复表:

PlainBashC++C#CSSDiffHTML/XMLJavaJavascriptMarkdownPHPPythonRubySQL

<?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.example.myvue.mapper.leaveMapper">

<resultMap id="extOrganMap" type="com.example.myvue.pojo.LeaveWord">

<result property="leaveWordId" column="leave_id"/>

<result property="leaveWordUserId" column="leave_user_id"/>

<collection column="leave_reply" property="leaveWordReplys" resultMap="replyMap">

<id column="leave_reply_id" property="id"/>

</collection>

</resultMap>

<resultMap id="replyMap" type="com.example.myvue.pojo.LeaveWordReply">

<id column="leave_reply_id" property="id"/>

<result property="leaveWordFatherId" column="leave_father_id"/>

<result property="leaveWordReplyId" column="leave_reply_id"/>

<result property="leaveWordReplyContent" column="leave_reply_content"/>

</resultMap>

<!--获取留言-->

<select id="getLeaveWord" resultMap="extOrganMap">

select `leave_word`.*,

`leave_reply`.*

from `leave`

left join `leave_reply` on leave_reply.leave_father_id = `leave_word`.leave_id

where `leave_word`.leave_id in (select z.leave_id from (select x.leave_id from `leave_word` as x order by x.leave_date asc limit #{page} ,#{limit}) as z)

order by `leave_word`.leave_date desc, `leave_reply`.leave_reply_date desc;

</select>

</mapper>

最后结果就是实现了留言的查询,并且可以使用分页,无需一次性把数据全部查询出来而影响查询速度。 原文地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/06/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「小程序JAVA实战」小程序的留言和评价功能(70)
PS:其实都是基本操作,但是有个传值页面属性data绑定必须详细说下,这个很重要。
IT架构圈
2019/07/08
7210
「小程序JAVA实战」小程序的留言和评价功能(70)
CRUD 程序猿的 Mybatis 进阶
通过对 product 表进行 CRUD 操作,来梳理 Mybatis 动态标签 <if>、<where>、<foreach>、<trim>、<set>、<choose>、<when>、<otherwise> 的用法。
SupremeSir
2020/12/11
3520
MyBatis-resultMap参数
resultMap 标签可以建立查询的字段名和实体类的属性名称不一致时建立对应关系。从而实现封装。 在 select 标签中使用 resultMap 属性指定引用即可。同时 resultMap 可以实现将查询结果映射为复杂类型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询。
星哥玩云
2022/09/14
3770
_Mybatis分解式查询
也可以使用分解式查询,即将一个连接Sql语句分解为多条Sql语句,如: # 查询班级时关联查询出学生
会洗碗的CV工程师
2023/11/20
1530
_Mybatis分解式查询
SSM框架(六)Mybatis实现一对多和多对一查询
前言 其它配置操作请看上一篇,这篇着重讲解mapper.xml的SQL写法。 导入偷懒插件 IDEA需要先安装Lombok插件 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </depende
HcodeBlogger
2020/07/14
1.4K0
Dubbo 分布式架构搭建教育 PC 站 - 后端:订单模块,留言模块
订单模块 购买 / 生成订单 功能描述: 用户选好课程点击立即购买,调用后端接口,开始创建商品订单。 需要校验必要数据:用户是否登录; 接口的请求入参,课程是否存在,课程是否上架; 该用户之前是否成功
RendaZhang
2020/11/04
5160
Mybatis分解式查询
一、Mybatis一对多分解式查询 分解式查询就是将一条Sql语句拆分成多条 在MyBatis多表查询中,使用连接查询时一个Sql语句就可以查询出所有的数据。如: # 查询班级时关联查询出学生 select *    from classes    left join student    on student.classId = classes.cid 也可以使用分解式查询,即将一个连接Sql语句分解为多条Sql语句,如: # 查询班级时关联查询出学生 select * from
会洗碗的CV工程师
2023/04/12
3990
Mybatis分解式查询
java学习笔记(中级篇)—细说mybatis的使用方式
我这里就直接创建一个简单的java项目了,这要求先要下载好mybatis-3.x.0.jar,然后把包导进项目,因为要连接数据库,所以还需要数据库驱动包,我用的是Oracle14.jar。习惯使用maven来构建项目的也是可以的,就不用自己去下离线jar包了,直接去maven respository官网搜索mybatis复制到pom.xml文件就好了。
chlinlearn
2019/08/15
6790
java学习笔记(中级篇)—细说mybatis的使用方式
【MyBatis框架点滴】——MyBatis一对多查询
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51588119
DannyHoo
2018/09/13
7600
【MyBatis框架点滴】——MyBatis一对多查询
MyBatis 多表操作
  关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。
Demo_Null
2020/09/28
3470
MyBatis 多表操作
Mybatis mapper.xml接口开发复习
以用户和账户为例 我们要查询账户以及其对应的使用者的信息,我们一般常用的方式是在从表中建立主表对象,这样如果我们想联动的查询信息,只要将主表的信息封装进去即可, 本次案例中即 account账户中建立用户user对象
名字是乱打的
2021/12/22
2700
Mybatis mapper.xml接口开发复习
mybatis教程5(延迟加载和缓存)
  在关系型数据库中,表与表之间很少是独立与其他表没关系的。所以在实际开发过程中我们会碰到很多复杂的关联关系。在此我们来分析下载mybatis中怎么处理这些关系
用户4919348
2019/04/02
5170
mybatis教程5(延迟加载和缓存)
_Mybatis关联查询【附实战案例】
会洗碗的CV工程师
2023/11/20
1970
_Mybatis关联查询【附实战案例】
当Mybatis遇上目录树,有哪些解决方法?
相信你也遇到过这种场景,判断二级目录属于哪个一级目录,一个员工属于哪个上级员工领导…
砖业洋__
2023/05/06
2380
当Mybatis遇上目录树,有哪些解决方法?
MyBatis 二级缓存
映射语句中的select语句将会被缓存, 映射语句中的insert update delete 语句将会刷新缓存
mySoul
2019/04/19
5420
Mapper代理开发
Mybatis 官网推荐使用 Mapper 代理的方式进行开发,他们的区别如下。
GeekLiHua
2025/01/21
1250
Mapper代理开发
MyBatis之级联——一对一关系
在学数据库概论的时候会听到这么几个词:数据库的关系分为一对一、一对多、多对多。对于在学校里学的知识已经忘得差不多了,在这里简单的提一下数据库的关系。此篇是介绍MyBatis是如何实现数据库中一对一关系的,我们就暂且先介绍一对一关系。所谓一对一关系其实在生活中很常见,比如一个学生有且只对应一个属于他的学生证。下面就是我们的所假设的数据库物理模型。 image.png 在这个数据库模型中,学生证和学生表是1对1的关系。那么基于此,我们会在Java代码的POJO包中就会有两个POJO对象,Student和Sel
用户1148394
2018/01/09
6590
MyBatis之级联——一对一关系
MyBatis之级联——鉴别器
鉴别器(discriminator)是MyBatis为我们提供的第三个级联也是最后一个。基于之前两篇级联中的场景,现增加学生们去体检,但男女体检项目不一样,我们把男女体检表做成两张表,当然我想也可以设计为一张表,只有女生的项目男生不填就行了,为了讲解鉴别器就把男女体检表分开。鉴别器的作用在这里就是根据性别的不同去不同的表里进行查询体检情况,例如是男生就在男生体检表里查询,是女生就在女生体检表里查询。 POJO类我们也分为了男生、女生,他们分别继承之前的Student类。 MaleStudent类: 1 p
用户1148394
2018/01/09
6310
MyBatis之级联——一对多关系
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证。那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系。我们结合上一章中的学生和学生证,在此基础
用户1148394
2018/01/09
8420
MyBatis之级联——一对多关系
MyBatis:多对一和一对多
目录 多对一 配置数据库 搭建环境测试 按查询嵌套处理 按结果嵌套处理 总结 一对多 实体类编写 按结果嵌套处理 按查询嵌套处理 总结 多对一 多对一关系:多个学生对应一个老师 配置数据库 数据库的设计: 创建数据库: CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8
愷龍
2023/01/08
1.1K0
MyBatis:多对一和一对多
相关推荐
「小程序JAVA实战」小程序的留言和评价功能(70)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档