JavaWeb项目之QQ Zone:(四)对象关联

4.1 问题描述

  1. 已知Topic的id,需要根据Topic的id获取特定Topic
  2. 获取这个Topic关联的所有的Reply
  3. 如果某个Reply有HostReply,需要查询出来

即:根据topicId查询出来的Topic对象要包含其所有Reply,同时每个Reply还要包含其HostReply信息

4.2 解决方案

我们应确保所有的DAO层的操作都是对数据库表的原子操作,对于对象的关联,我们应该在Service层完成。

所以,我们在HostReplyService中实现与UserBasic的对象关联(HostReply中包含作者信息),在ReplyService中实现与HostReplyService的对象关联(每个Reply可能包含有其HostReply),在TopicService中实现与Reply的关联(每个Topic有其对应的Reply列表)。

代码

HostReplyServiceImpl:

package qqzone.service.impl;

import qqzone.dao.HostReplyDAO;
import qqzone.pojo.HostReply;
import qqzone.pojo.UserBasic;
import qqzone.service.HostReplyService;
import qqzone.service.UserBasicService;


public class HostReplyServiceImpl implements HostReplyService {

    HostReplyDAO hostReplyDAO;
    UserBasicService userBasicService;

    @Override
    public HostReply getHostReplyByReplyId(Integer replyId) {
        HostReply hostReply = hostReplyDAO.getHostReplyByReplyId(replyId);
        if(hostReply != null){
            UserBasic author = userBasicService.getUserBasicById(hostReply.getAuthor().getId());
            if (author != null){
                hostReply.setAuthor(author);
            }
        }
        return hostReply;
    }

    @Override
    public HostReply getHostReplyById(Integer hostReplyId) {
        HostReply hostReply = hostReplyDAO.getHostReplyById(hostReplyId);
        if(hostReply != null){
            UserBasic author = userBasicService.getUserBasicById(hostReply.getAuthor().getId());
            if (author != null){
                hostReply.setAuthor(author);
            }
        }
        return hostReply;
    }

    @Override
    public void delHostReply(Integer id) {
        hostReplyDAO.delHostReply(id);
    }
}

ReplyServiceImpl:

package qqzone.service.impl;

import qqzone.dao.ReplyDAO;
import qqzone.pojo.HostReply;
import qqzone.pojo.Reply;
import qqzone.pojo.UserBasic;
import qqzone.service.HostReplyService;
import qqzone.service.ReplyService;
import qqzone.service.UserBasicService;

import java.util.List;

public class ReplyServiceImpl implements ReplyService {

    ReplyDAO replyDAO;
    HostReplyService hostReplyService;
    UserBasicService userBasicService;

    @Override
    public List<Reply> getReplyList(Integer topicId) {
        List<Reply> replyList = replyDAO.getReplyList(topicId);
        for (Reply reply : replyList) {
            UserBasic author = userBasicService.getUserBasicById(reply.getAuthor().getId());
            if (author != null){
                reply.setAuthor(author);
            }
            HostReply hostReply = hostReplyService.getHostReplyByReplyId(reply.getId());
            if(hostReply != null){
                reply.setHostReply(hostReply);
            }
        }
        return replyList;
    }

    @Override
    public void addReply(Reply reply) {
        replyDAO.add(reply);
    }

    @Override
    public void delReply(Integer replyId) {
        //在删除reply之前要删除其主人回复
        HostReply hostReply = hostReplyService.getHostReplyByReplyId(replyId);
        if(hostReply != null){
            hostReplyService.delHostReply(hostReply.getId());
        }
        replyDAO.delete(replyId);
    }
}

TopicServiceImpl:

package qqzone.service.impl;

import qqzone.dao.TopicDAO;
import qqzone.pojo.Reply;
import qqzone.pojo.Topic;
import qqzone.pojo.UserBasic;
import qqzone.service.ReplyService;
import qqzone.service.TopicService;
import qqzone.service.UserBasicService;

import java.util.List;

public class TopicServiceImpl implements TopicService {
    TopicDAO topicDAO;
    ReplyService replyService;
    UserBasicService userBasicService;

    @Override
    public List<Topic> getTopicList(UserBasic userBasic) {
        List<Topic> topicList = topicDAO.getTopicList(userBasic);
        for (Topic topic : topicList) {
            UserBasic author = userBasicService.getUserBasicById(topic.getAuthor().getId());
            if(author != null){
                topic.setAuthor(author);
            }
            List<Reply> replyList = replyService.getReplyList(topic.getId());
            if(!replyList.isEmpty()){
                topic.setReplyList(replyList);
            }
        }
        return topicList;
    }

    @Override
    public Topic getTopicById(Integer id) {
        Topic topic = topicDAO.getTopic(id);
        UserBasic author = userBasicService.getUserBasicById(topic.getAuthor().getId());
        if(author != null){
            topic.setAuthor(author);
        }
        List<Reply> replyList = replyService.getReplyList(topic.getId());
        if(!replyList.isEmpty()){
            topic.setReplyList(replyList);
        }
        return topic;
    }

    @Override
    public void delTopic(Integer topicId) {
        // 在删除文章之前删除所有回复
        List<Reply> replyList = replyService.getReplyList(topicId);
        if(!replyList.isEmpty()){
            for (Reply reply : replyList) {
                replyService.delReply(reply.getId());
            }
        }
        topicDAO.delTopic(topicId);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值