开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
获取会员阅读状态
1.定义实体MemberReadState
2.定义mapper接口
public interface MemberReadStateMapper extends BaseMapper<MemberReadState> {
}
3.MemberService定义根据用户id和图书id查询图书阅读状态
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方法
@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.控制器设置获取图书详情阅读状态
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.图书详情页更改
$(function () {
<#if memberReadState?? >
$("*[data-read-state='${memberReadState.readState}']").addClass("highlight");
</#if>
})
代码说明:
- <#if memberReadState?? >:判断是否存在阅读信息
- .addClass("highlight"):对页面中存在data-read-state的属性进行赋值
8.重启项目
9.设置想看和看过业务逻辑处理
接口中定义看过和想看业务方法
10.实现方法
@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>