社交项目(十五)

66 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

获取会员阅读状态

1.定义实体MemberReadState

image.png

2.定义mapper接口

image.png

public interface MemberReadStateMapper extends BaseMapper<MemberReadState> {
}

3.MemberService定义根据用户id和图书id查询图书阅读状态

image.png

public MemberReadState selectMemberReadState(Long memberId, Long bookId);

4.定义MemberReadStateMapper

<?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.imooc.reader.mapper.MemberReadStateMapper">

</mapper>

5.实现selectMemberReadState方法

image.png

@Override
public MemberReadState selectMemberReadState(Long memberId, Long bookId) {
    QueryWrapper queryWrapper = new QueryWrapper<MemberReadStateMapper>();
    queryWrapper.eq("member_id",memberId);
    queryWrapper.eq("book_id",bookId);
    MemberReadState memberReadState =  memberReadStateMapper.selectOne(queryWrapper);
    return memberReadState;
}

6.控制器设置获取图书详情阅读状态

image.png

Member member = (Member) session.getAttribute("loginMember");
if (member != null) {
    //获取阅读状态
    MemberReadState memberReadState = memberService.selectMemberReadState(member.getMemberId(), id);
    mav.addObject("memberReadState", memberReadState);
}

代码说明:

  • (Member) session.getAttribute("loginMember"):通过session获取用户信息
  • mav.addObject("memberReadState", memberReadState):把文章阅读状态信息写入文章详情页

7.图书详情页更改

image.png

$(function () {
    <#if memberReadState?? >
    $("*[data-read-state='${memberReadState.readState}']").addClass("highlight");
    </#if>
})

代码说明:

  • <#if memberReadState?? >:判断是否存在阅读信息
  • .addClass("highlight"):对页面中存在data-read-state的属性进行赋值

8.重启项目

image.png

9.设置想看和看过业务逻辑处理

接口中定义看过和想看业务方法 image.png

10.实现方法

image.png

@Override
public MemberReadState updateMemberReadState(Long memberId, Long bookId, Integer readState) {
    QueryWrapper queryWrapper = new QueryWrapper<MemberReadState>();
    queryWrapper.eq("book_id",bookId);
    queryWrapper.eq("member_id",memberId);
    MemberReadState memberReadState = memberReadStateMapper.selectOne(queryWrapper);
    if(null==memberReadState){
      memberReadState =    new MemberReadState();
      memberReadState.setMemberId(memberId);
      memberReadState.setBookId(bookId);
      memberReadState.setReadState(readState);
      memberReadState.setCreateTime(new Date());
       memberReadStateMapper.insert(memberReadState);
    }else{
        memberReadState.setReadState(readState);
        memberReadStateMapper.updateById(memberReadState);
    }
    return memberReadState;
}

代码说明:

  • memberReadStateMapper.selectOne(queryWrapper):判断是否存在看过或者想看业务逻辑
  • null==memberReadState:不存在记录,则写入数据库,存在则改变状态

11.book详情页调用接口

<#if loginMember??>
$("*[data-read-state]").click(function () {
    //会员阅读状态
    var readState = $(this).data("read-state");
    //发送请求
    $.post("/update_read_state", {
        memberId:${loginMember.memberId},
        bookId:${book.bookId},
        readState: readState
    }, function (json) {
        if (json.code == "0") {
            $("*[data-read-state]").removeClass("highlight");
            $("*[data-read-state='" + readState + "']").addClass("highlight");
        }
    }, "json")
});
</#if>

12.重启项目

image.png