仿牛客社区——1.30开发社区首页

实现功能

• 开发流程

- 1次请求的执行过程

• 分步实现

- 开发社区首页,显示前10个帖子

- 开发分页组件,分页显示所有的帖子

entity

Page

设置分页相关信息

public class Page {
    //当前页码
    private int current=1;
    //页面显示上限
    private  int limit=10;
    /*
    前两个是页面传入的信息;后两个变量是服务器自身要使用的数据
     */
    //数据总数(用于计算总的页数)  服务端查出来的
    private int rows;

    //查询路径(复用分页链接
    private String path;

    public int getCurrent() {
        return current;
    }

    public void setCurrent(int current) {
        if(current>=1){
            this.current = current;
        }
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        if(limit>=1&&limit<=100){

            this.limit = limit;
        }
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        if(rows>=0){

            this.rows = rows;
        }
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
    //额外提供条件:数据库查询需要用到的、页面显示需要用到的

    //获取当前页的起始行:页码*当前页上限-上限
    public int getOffset(){
        //current*limit-limit
        return (current-1)*limit;
    }
    //用来获取总的页数
    public int getTotal(){
        if(rows%limit==0){

            return rows/limit;
        }else{
            return (rows/limit)+1;
        }
    }

    //从···页到···页
    public int getFrom(){
        //获取起始页码:只显示当前页的前两呀页
        int from=current-2;

        return from<1?1:from;
    }

    public int getTo(){
        //获取终止页码:只显示当前页的后两页
        int to=current+2;
        return to>getTotal()?getTotal():to;

    }
}

DiscussPost

帖子相关信息

public class DiscussPost {
    private int id;
    private int userId;
    private String title;
    private String content;
    private int type;
    private int status;
    private Date createTime;
    private int commentCount;
    private double score;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public int getCommentCount() {
        return commentCount;
    }

    public void setCommentCount(int commentCount) {
        this.commentCount = commentCount;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "DiscussPost{" +
                "id=" + id +
                ", userId=" + userId +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", type=" + type +
                ", status=" + status +
                ", createTime=" + createTime +
                ", commentCount=" + commentCount +
                ", score=" + score +
                '}';
    }
}

controller

@Controller  //Controller访问路径可省略
public class HomeController implements CommunityConstant {
   //Controller会调用Service,需要将Service注入
    @Autowired
    private DiscussPostService discussPostService;

    @Autowired
    //会通过discussPostService查到的userId查找具体User信息
    private UserService userService;

    @Autowired
    private LikeService likeService;


    //定义处理请求的方法
     //若返回的是一个HTML,则不用加@Response注解
    @RequestMapping(path = "/index",method = RequestMethod.GET)
    public String getIndexPage(Model model, Page page){
        //在SpringMVC中,方法参数都是由DispatcherServlet初始化的,
        //还会额外把Page对象装进Model中

        /*
        在方法调用前,SpringMVC会自动实例化Model和Page,并将Page注入Model中
        所以在thymeleaf模板中就可以直接访问Page对象中的数据
         */

        page.setRows(discussPostService.findDiscussPostRows(0));//设置总行数
        page.setPath("/index");//设置返回路径


        //首先获取帖子信息
        List<DiscussPost> list = discussPostService.findDiscussPosts(0, page.getOffset(), page.getLimit());
        List<Map<String,Object>>  discussPosts=new ArrayList<>();
        for(DiscussPost post:list){
            Map<String,Object> map=new HashMap<>();
            map.put("post",post);
            User user = userService.findUserById(post.getUserId());//再通过获取的帖子信息的UserID找到User完整信息
            map.put("user",user);
            //获取点赞数量
            long likeCount = likeService.findEntityLikeCount(ENTITY_TYPE_POST, post.getId());
            map.put("likeCount",likeCount);
            discussPosts.add(map);
        }
        model.addAttribute("discussPosts",discussPosts);

        //通过
        return "/index";
    }
}

service

DiscusspostService

@Service
public class DiscussPostService {

    @Autowired
    private DiscussPostMapper discussPostMapper;



    public List<DiscussPost> findDiscussPosts(int userId, int offset, int limit) {
        return discussPostMapper.selectDiscussPost(userId, offset, limit);
    }

    public int findDiscussPostRows(int userId) {
        return discussPostMapper.selectDiscussPostRows(userId);
    }
}

dao

@Mapper//mybatis注解
public interface DiscussPostMapper {
    //声明查询方法:分页查询,返回多条记录
    List<DiscussPost> selectDiscussPost(int userId,int offset,int limit);
    //查询出表里一共有多少条数据   @Param("userId"):为参数取别名
    int selectDiscussPostRows(@Param("userId")int userId);
    //如果需要动态的提出条件(在<if>里使用),并且需要用到这个参数,且这个方法有且只有一个条件参数,此参数必须取别名

    //实现插入帖子功能
    int insertDiscussPost(DiscussPost discussPost);

    //查找帖子-->通过id
    DiscussPost selectDiscussPostById(int id);

    //增加帖子评论数量
    int updateCommentCount(int id,int commentCount);
}

DiscussPost.xml

<mapper namespace="com.light.community.dao.DiscussPostMapper"><!--填写discusspost-mapper的全限定类名-->

    <!--提取查询字段-->
    <sql id="selectFields">
        id,user_id,title,content,type,status,create_time,comment_count,score
    </sql>

    <!--提取插入字段-->
    <sql id="insertFields">
        user_id,title,content,type,status,create_time,comment_count,score
    </sql>


    <select id="selectDiscussPost" resultType="DiscussPost">
        select <include refid="selectFields"></include>
        from discuss_post
        where status!=2
        <if test="userId!=0">
            and user_id=#{userId}
        </if>
        order by type desc,create_time desc
        limit #{offset},#{limit}
    </select>

    <select id="selectDiscussPostRows" resultType="int">
        select count(id)
        from discuss_post
        where status!=2
        <if test="userId!=0">
            and user_id=#{userId}
        </if>
    </select>
</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值