美文网首页
问答模块qa编写

问答模块qa编写

作者: 神豪VS勇士赢 | 来源:发表于2019-03-09 20:46 被阅读0次

    接下来 我们来完成问答模块的开发

    image.png
    CREATE TABLE tb_problem (
    id varchar(255) NOT NULL COMMENT '主键',
    titlle varchar(255) NOT NULL COMMENT '问题标题',
    content varchar(255) NOT NULL COMMENT '问题内容',
    createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发布日期',
    modifytime datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期',
    userid varchar(255) NOT NULL COMMENT '用户id',
    nickname varchar(255) DEFAULT NULL COMMENT '用户昵称',
    visits bigint(255) DEFAULT NULL COMMENT '浏览数量',
    thumbup bigint(20) DEFAULT NULL COMMENT '点赞数量',
    reply varchar(255) DEFAULT NULL COMMENT '回复数量',
    solve varchar(255) DEFAULT NULL COMMENT '是否解决',
    replyname varchar(255) DEFAULT NULL COMMENT '最新回复人',
    replytime datetime DEFAULT NULL COMMENT '最新回复的日期',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; image.png
    CREATE TABLE tb_reply (
    id varchar(255) NOT NULL COMMENT '主键',
    problemid varchar(255) NOT NULL COMMENT '问题id',
    content varchar(255) NOT NULL COMMENT '回答内容',
    createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '回答日期',
    modifytime datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期',
    userid varchar(255) NOT NULL COMMENT '回答人的id',
    nickname varchar(255) DEFAULT NULL COMMENT '回答人的昵称',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; image.png
    CREATE TABLE tb_pl (
    problemid varchar(255) CHARACTER SET latin1 NOT NULL COMMENT '问题id',
    labelid varchar(255) CHARACTER SET latin1 NOT NULL COMMENT '标签id',
    PRIMARY KEY (problemid,labelid)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    同样也可以使用代码生成器完成代码的编写

    这里需要注意的是 中间表的实体:
    @Entity
    @Table(name = "tb_pl")
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class PL implements Serializable {
    @Id
    private String problemId;
    @Id
    private String lableId;
    }

    完成查询 最近某个标签下面最新的问题列表 并分页

    dao 如下所示:

    这里需要注意的是 pojo 和 数据库的字段必须一致 要不然 dao层会出问题

    public interface ProblemDao extends JpaRepository<Problem,String>,JpaSpecificationExecutor<Problem>{

    /**
     * 使用原生的SQL完成查询
     */
    @Query("select p from  Problem  p  where  id  in ( select  problemid  from  PL  where  labelid=?1 ) order by replytime desc ")
    public Page<Problem> findNewListByLabelId(String labelId, Pageable pageable);
    

    }

    service 层如下所示 :

    public Page<Problem> findNewListByLabelId(String labelId, int page, int size) {
        PageRequest pageRequest = PageRequest.of(page - 1, size);
        return problemDao.findNewListByLabelId(labelId, pageRequest);
    }
    

    controller 层如下所示:
    /**
    * 根据标签id 查询最新的问题列表
    */
    注意这面的@PathVariable注解 以及 service 里面的分页是如何处理的
    @RequestMapping(value = "/newList/{labelId}/{page}/{size}", method = RequestMethod.GET)
    public Result findNewListByLabelId(@PathVariable String labelId, @PathVariable int page, @PathVariable int size) {
    Page<Problem> newListByLabelId = problemService.findNewListByLabelId(labelId, page, size);
    PageResult<Problem> problemPageResult = new PageResult<>(newListByLabelId.getTotalElements(), newListByLabelId.getContent());
    return new Result(true, StatusCode.OK, "查询成功", problemPageResult);
    }

    接下来 接着写一个 按照回复数量递减的排序返回分页结果的接口
    dao层 代码如下:
    @Query("select p from Problem p where id in (select problemid from PL where labelid=?1 ) order by reply desc")
    public Page<Problem> findHotListByLabelId(String labelId, Pageable pageable);
    service层如下:
    public Page<Problem> findHotListByLabelId(String labelId, int page, int size) {
    PageRequest pageRequest = PageRequest.of(page-1, size);
    return problemDao.findHotListByLabelId(labelId, pageRequest);
    }
    controller 层如下:
    /根据回复数量的大小排序所有问题/
    @RequestMapping(value = "/hostList/{labelId}/{page}/{size}", method = RequestMethod.GET)
    public Result findHotListByLabelId(@PathVariable String labelId, @PathVariable int page, @PathVariable int size) {
    Page<Problem> hotListByLabelId = problemService.findHotListByLabelId(labelId, page, size);
    PageResult<Problem> problemPageResult = new PageResult<>(hotListByLabelId.getTotalElements(), hotListByLabelId.getContent());
    return new Result(true, StatusCode.OK, "查询成功", problemPageResult);
    }
    当然了
    一次类推 接下来还可以写很多的类似的 大家按照相同的写法 自己完成吧
    比如:
    /
    按照提问时间 降序 排序 找出所有未被回答的问题/

    相关文章

      网友评论

          本文标题:问答模块qa编写

          本文链接:https://www.haomeiwen.com/subject/gxuepqtx.html