接下来 我们来完成问答模块的开发
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);
}
当然了
一次类推 接下来还可以写很多的类似的 大家按照相同的写法 自己完成吧
比如:
/按照提问时间 降序 排序 找出所有未被回答的问题/
网友评论