功能介绍:
支持管理员发布、删除、查看公告信息,支持用户查看公告并标记出已读/未读状态。

设计思路:
首先设计公告表T_NOTICE,使用noticeId作为主键并使用UUID作为默认生成规则,包含公告内容noticeContent、公告发布时间noticePublishTime。
其次设计关系表T_RELATION,使用relationId作为主键并使用UUID作为默认生成规则,包含noticeId、userId。

已读/未读实现原理:
通过T_RELATION表里是否包含{noticeId, userId}的数据来判断用户是否查看过该公告。

主要场景分析:
管理员创建公告,用户读取公告,T_RELATION表中生成一条记录。
管理员删除公告,开启数据库事务,首先删除T_NOTICE表中的公告,其次删除T_RELATION表中对应的数据,事务结束。

PS:
起初读取公告历史记录(包含用户读取状态)时,获取对应pageSize的T_NOTICE数据,并在for中循环查询获取该用户是否读取过这些公告,这样有了n+1次数据库的操作
DTO findOneByUserIdAndNoticeId(String userId, String noticeId)
优化:
批量返回T_RELATION数据,避免多次操作数据库。
List findByUserIdAndNoticeIdIn(String userId, List noticeIds)
这时候涉及到两个List的取值问题,可以简单的使用两次for循环解决,时间复杂度是n^2,我采用的是将返回的数据转化为map,noticeId作为key,假如能从map中取到值则已读,反之未读,时间复杂度为2*n。

公告管理(记录一次查询优化)相关推荐

  1. 【高校宿舍管理系统】第十章 缺勤管理、报修管理、来访人员管理以及公告管理

    第十章 缺勤管理.报修管理.来访人员管理以及公告管理 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第十章 缺勤管理.报修管理 ...

  2. 【JAVA EE#6】【传智书城·源码阅读】后台管理模块:权限控制+页面分析+商品管理+销售榜单+订单管理+公告管理+项目结构思维导图

    权限控制 普通用户只能访问client文件夹下面的jsp文件,对于没有权限操作的admin文件夹就会提示错误,而超级用户同时可以访问两者,一直很好奇这个权限限制怎么实现的. 原来在存在一个AdminP ...

  3. 智能家居助手后台系统原型/智慧家居后台管理系统/应用分析/页面分析/设备分析/用户管理/运营管理/权限管理/系统设置/问题反馈/商城管理/消息管理/用户画像/公告管理/账号画像/留存用户/数据埋点

    作品介绍:智能家居助手后台系统原型/智慧家居后台管理系统/应用分析/页面分析/设备分析/用户管理/运营管理/权限管理/系统设置/问题反馈/商城管理/消息管理/用户画像/公告管理/账号画像/留存用户/数 ...

  4. Java学习(84)Java集合——案例:公告管理(ArrayList增删改查)

    案例:公告管理,增删改查(ArrayList增删改查) 公告管理需求: 1. 功能需求 2. 公告类属性: 3. 公告类方法 实现代码 定义公告类 公告的添加和显示 公告的删除和修改 运行结果: 公告 ...

  5. java学习5:公告管理案例

    公告管理案例 需求: --公告的添加和显示 --在指定位置处插入公告 --删除公告 --修改公告 类: --公告属性:编号id,标题 tile,创建人 creator , 创建时间 create Ti ...

  6. java 基于jeecg-boot的公告管理——上移、下移、置顶

    一.后端 实体类: package org.jeecg.modules.bidding.entity;import java.io.Serializable; import java.io.Unsup ...

  7. java毕业设计公告管理mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计公告管理mybatis+源码+调试部署+系统+数据库+lw java毕业设计公告管理mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  8. 图书管理系统——公告管理(高级查询功能)

    1查询公告 1.1点击api中"公告管理"进行页面的跳转 1.2在Controller下创建跳转页面路径 NoticeController.java @Autowiredpriva ...

  9. SSH+Mysql实现的作业批改管理系统(功能包含分学生、教师、管理员三种角色登录,作业上传、给老师留言、学习内容下载、作业评分、给学生留言、教师学生管理、公告管理、学习资源管理、作业管理等)

    博客目录 SSH+Mysql实现的作业批改管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSH+Mysql实现的作业批改管理系统 本系统是一个作业批改管理系统系统,分为三个角色:学生.教 ...

最新文章

  1. 微软鲍尔默回应被苹果超越:将开发更好产品
  2. 一个项目经理的一些个人体会
  3. 把程序显示在最前面 delphi_地球程序员之神:没上过大学,曾拒盖茨的Offer,4代码农靠他吃饭...
  4. 前端学习(3113):react-hello-类式组件
  5. mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
  6. https://sysdig.com/
  7. linux负载均衡技术的分类,LinuxLVS负载均衡群集
  8. Android:Eclipse+ADT+Android SDK 搭建安卓开发环境
  9. 计算机信息管理系统实训摘要,计算机实训报告摘要.doc
  10. 白话区块链 之1: 为什么账本要这么记?
  11. cc直播怎么显示服务器,CC直播像素杯四大服务器严阵以待 MC精彩赛事即刻开启...
  12. VS2003添加.BMP资源
  13. 方差分析结果如何看?指标怎么计算?
  14. 重装系统显示未找到任何音频输出设备
  15. 使照片带有妙的电影色彩55款工具套件的lr微妙的电影调色预设
  16. ios点击推送闪退_关于苹果手机QQ闪退的问题
  17. 员工试用期转正申请书(泸州老窖)
  18. pytorch入门篇1 创建tensor
  19. Occlusion culling
  20. C是C++的子集吗?

热门文章

  1. Mybatis什么时候需要声明jdbcType?
  2. CSS中的position:relative理解
  3. 计算机的大小在哪里比较合适,一般电脑桌尺寸 电脑桌尺寸多少合适
  4. java 单例模式双重检索_Java单例模式的双重检测
  5. jsplumb拖线_jsPlumb开发入门教程(实现html5拖拽连线)
  6. 自适应分辨率的大屏的工具推荐
  7. 怎样把智能桌牌的价格降下来 ――电子墨水屏桌牌的精简降本设计
  8. docker inspect命令详解
  9. 几款思维导图软件的调研与选择(附下载地址)
  10. c语言中求一个3x3的整形矩阵,编程实现求两个3x3矩阵的和(C语言)