BBS论坛项目相关-6:私信模块(SQL)

本文介绍了BBS论坛私信模块的功能,包括私信列表和私信详情。私信列表展示当前用户的会话,每个会话显示最新一条私信,支持分页。私信详情则查询会话中的所有私信。文章详细讲解了SQL查询逻辑,如按conversation_id分组获取最新会话,以及查询会话数量、私信数量和未读私信数量。同时,还阐述了如何封装方法获取对话目标,并提供了读取未读消息和发送私信的SQL操作。
摘要由CSDN通过智能技术生成

BBS论坛项目相关-6:私信模块

功能

私信列表:
查询当前用户的会话列表
每个会话只显示一条最新的私信
支持分页显示
私信详情:
查询每个会话所包含的私信
支持分页查询
会话表:id,from_id,to_id,conversation_id(将id小的放在前面,大的放在后面,设置这一项的目的是为了以后直接通过会话id进行查询筛选),content,status(0-未读,1-已读,2-),create_time

私信列表

私信列表只显示最新的一条会话:按照conversation_id分组,查询条件:from_id = #{userId} or to_id = #{userId},且状态合法,from_id不为1的消息中id最大的那条消息就是最新消息。
from_id为1表示是系统发的通知

    <sql id="insertFields">
        from_id, to_id, conversation_id, content, status, create_time
    </sql>

    <select id="selectConversations" resultType="Message">
        select <include refid="selectFields"></include>
        from message
        where id in (
            select max(id) from message
            where status != 2
            and from_id != 1
            and (from_id = #{userId} or to_id = #{userId})
            group by conversation_id
        )
        order by id desc
        limit #{offset}, #{limit}
    </select>

查询该用户总的会话数量

   <select id="selectConversationCount" resultType="int">
        select count(m.maxid) from (
            select max(id) as maxid from message
            where status != 2
            and from_id != 1
            and (from_id = #{userId} or to_id = #{userId})
            group by conversation_id
        ) as m
    </select>

controller层:查询会话列表
先获取当前用户的信息,可直接从ThreadLocal中获取,然后根据用户id查询会话数量得到一个list集合,同样使用一个List<Map<String, Object>> conversations在遍历list的过程中,装载每个会话自身的信息以及每个会话的私信数量和未读私信数量、会话对象的用户信息(可显示与之对话的用户头像)等。装载总未读会话数

 @RequestMapping(path = "/letter/list", method = RequestMethod.GET)
    public String getLetterList(Model model, Page page) {
   
        User user = hostHolder.getUser();
        // 分页信息
        page.setLimit(5);
        page.setPath("/letter/list");
        page.setRows(messageService.findConversationCount(user.getId()));

        // 会话列表
        List<Message> conversationList = messageService.findConversations(
                user.getId(), page.getOffset(), page.getLimit());
        List<Map<String, Object>> conversations = new ArrayList<>();
        if (conversationList != null) {
   
            for (Message message : conversationList) {
   
                Map<String, Object> map = new 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值