项目9-网页聊天室6(会话管理之创建会话)

0.前端知识

js中click 和onclick之间的区别_js click和onclick-CSDN博客

1.相关操作

点击一个好友,触发的操作有两种情况:

1.如果会话不存在,则创建会话.

1)需要在客户端上创建出一个对应的“标签,放到会话列表中,这个标签应该处于被选中的高亮状态,同时置顶,还要切换到 会话列表标签页这里

2)要给服务器发送一个请求,告诉服务器咱们有了个新的会话,让服务器保存这个会话的信息.

2.如果会话已经存在,则把之前的会话找到(消息管理再看)

1)把标签页切换到会话列表,找到指定的会话,置顶&设为选中状态

2)给服务器发送个请求,获取到该会话的历史消息列表,显示到右侧区域

2.约定前后端交互

 所谓"创建会话,让服务器保存"”

就是让服务器的数据库来在这两个表中记录数据

比如,我现在是 zhangsan

我点击了好友列表中的 lisi.创建新的会话涉及到三个数据库操作

1.先在 message session 表里新增一个数据项.新增的数据项就表示当前的这个会话,同时获取到新会话的自增主键

2.给 message session user 表插入记录100,1(zhangsan 包含在会话 100 中)

3.给 message session user 表插入记录100,2(lisi 包含在会话 100 中)

2.1 需要两个实体类

3.后端代码 

3.1 MODEL

@Data
public class MessageSessionUserItem {
    private Integer sessionId;
    private Integer userId;
}

3.2 MAPPER

//3.新增一个会话,返回一个会话id
    //这样的方法返回值 int 表示的是插入操作影响到几行
    //此处获取 sessionId 是通过参数的 messageSession的 sesionId 属性获取的
    Integer addMessage(MessageSession messageSession);
    //4.给message_session_user表也新增对应的记录
    void addMessageSessionUser(MessageSessionUserItem messageSessionUserItem);
<!--获取自增主键,并将获取的信息保存到sessionId中-->
    <insert id="addMessage" useGeneratedKeys="true" keyProperty="sessionId">
        insert into message_session values (null,now())
    </insert>

    <insert id="addMessageSessionUser">
        insert into message_session_user values (#{sessionId},#{userId})
    </insert>

3.3 CONTROLLER

@RequestMapping("/createSession")
    @Transactional
    //    保证原子性,放在事务出现一半
    public Result createSession(HttpSession session,Integer touserId){
        User user= (User) session.getAttribute(Constant.USERINFO_SESSION_KEY);
        //数据库的插入操作
        //1.先对message_session表进行插入数据,使用这个参数的目的是获取会话的sessionId
        //MessageSession中的friends和lastMessage用不上
        MessageSession messageSession=new MessageSession();
        messageSessionMapper.addMessage(messageSession);

        //2.给message_session_user表中插入数据
        //自己的userId
        MessageSessionUserItem item1=new MessageSessionUserItem();
        item1.setSessionId(messageSession.getSessionId());
        item1.setUserId(user.getUserId());
        //对方的userId
        MessageSessionUserItem item2=new MessageSessionUserItem();
        item2.setSessionId(messageSession.getSessionId());
        item2.setUserId(touserId);
        messageSessionMapper.addMessageSessionUser(item1);
        messageSessionMapper.addMessageSessionUser(item2);
        System.out.println("新增会话成功!!" );
        System.out.println("sessionId:"+messageSession.getSessionId());
        System.out.println("userId1"+item1.getUserId());
        System.out.println("userId2"+item2.getUserId());
        HashMap<String,Integer> hashMap=new HashMap<>();
        hashMap.put("sessionId", messageSession.getSessionId());
        return Result.success(hashMap);
    }

3.4 POSTMAN测试

4.前端代码

// friendId 是构造 HTTP 请求时必备的信息
function createSession(friendId, sessionLi) {
    $.ajax({
        type: 'post',
        url: '/session/createSession?toUserId=' + friendId,
        success: function(result) {
            body=result.data;
            console.log("会话创建成功! sessionId = " + body.sessionId);
            sessionLi.setAttribute('message-session-id', body.sessionId);
        }, 
        error: function() {
            console.log('会话创建失败!');
        }
    });

测试!!!

 成功!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值