1.1 表结构分析
问题表:tb_problem
CREATE DATABASE IF NOT EXISTS `coder_qa` CHARACTER SET utf8;
USE `coder_qa`;
DROP TABLE IF EXISTS `tb_problem`;
CREATE TABLE `tb_problem` (
`id` varchar(20) NOT NULL COMMENT 'ID',
`title` varchar(100) DEFAULT NULL COMMENT '标题',
`content` text COMMENT '内容',
`createtime` datetime DEFAULT NULL COMMENT '创建日期',
`updatetime` datetime DEFAULT NULL COMMENT '修改日期',
`userid` varchar(20) DEFAULT NULL COMMENT '用户ID',
`nickname` varchar(100) DEFAULT NULL COMMENT '昵称',
`visits` bigint(20) DEFAULT NULL COMMENT '浏览量',
`thumbup` bigint(20) DEFAULT NULL COMMENT '点赞数',
`reply` bigint(20) DEFAULT NULL COMMENT '回复数',
`solve` varchar(1) DEFAULT NULL COMMENT '是否解决',
`replyname` varchar(100) DEFAULT NULL COMMENT '回复人昵称',
`replytime` datetime DEFAULT NULL COMMENT '回复日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='问题';
insert into `tb_problem`(`id`,`title`,`content`,`createtime`,`updatetime`,`userid`,`nickname`,`visits`,`thumbup`,`reply`,`solve`)
values ('1','这是个问题','代码调试不通咋办?','2018-01-08 11:50:50','2018-01-09 11:50:54','2',NULL,101,NULL,NULL,NULL);
回答表:tb_reply
DROP TABLE IF EXISTS `tb_reply`;
CREATE TABLE `tb_reply` (
`id` varchar(20) NOT NULL COMMENT '编号',
`problemid` varchar(20) DEFAULT NULL COMMENT '问题ID',
`content` text COMMENT '回答内容',
`createtime` datetime DEFAULT NULL COMMENT '创建日期',
`updatetime` datetime DEFAULT NULL COMMENT '更新日期',
`userid` varchar(20) DEFAULT NULL COMMENT '回答人ID',
`nickname` varchar(100) DEFAULT NULL COMMENT '回答人昵称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='回答';
insert into `tb_reply`(`id`,`problemid`,`content`,`createtime`,`updatetime`,`userid`,`nickname`) values ('','1',NULL,NULL,NULL,NULL,NULL);
insert into `tb_reply`(`id`,`problemid`,`content`,`createtime`,`updatetime`,`userid`,`nickname`) values ('2','1','问老师呗','2018-01-10 14:14:06',NULL,'1',NULL);
insert into `tb_reply`(`id`,`problemid`,`content`,`createtime`,`updatetime`,`userid`,`nickname`) values ('3','2','明天再调','2018-01-07 14:14:13',NULL,'1',NULL);
回答标签中间表:tb_pl
DROP TABLE IF EXISTS `tb_pl`;
CREATE TABLE `tb_pl` (
`problemid` varchar(20) NOT NULL COMMENT '问题ID',
`labelid` varchar(20) NOT NULL COMMENT '标签ID',
PRIMARY KEY (`problemid`,`labelid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `tb_pl`(`problemid`,`labelid`) values ('1','1');
DROP TABLE IF EXISTS `tb_ul`;
CREATE TABLE `tb_ul` (
`uid` varchar(20) NOT NULL COMMENT '用户ID',
`lid` varchar(20) NOT NULL COMMENT '标签ID',
PRIMARY KEY (`uid`,`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2 代码生成
(1)使用代码生成器生成招聘微服务代码
coder_qa
(2)拷贝到当前工程,并在父工程引入。
(3)修改Application类名称为QaApplication
(4)修改application.yml中的端口为 9003 ,url 为jdbc:mysql://120.78.134.111:3306/coder_qa?characterEncoding=UTF8
(5)进行浏览器测试
1.3 代码编写
1.3.1 最新回答列表
需求分析:最新回复的问题显示在上方, 按回复时间降序排序。
1.3.2 热门问答列表
需求分析:按回复数降序排序
1.3.3 等待回答列表
(1)ProblemDao 新增方法定义
/**
* 最新回答列表
* @param labelid
* @param pageable
* @return
*/
@Query(value = "SELECT * FROM tb_problem, tb_pl WHERE id = problemid AND labelid = ? ORDER BY replytime DESC", nativeQuery = true)
public Page<Problem> newList(String labelid, Pageable pageable);
/**
* 热门问答列表
* @param labelid
* @param pageable
* @return
*/
@Query(value = "SELECT * FROM tb_problem, tb_pl WHERE id = problemid AND labelid = ? ORDER BY reply DESC", nativeQuery = true)
public Page<Problem> hotList(String labelid, Pageable pageable);
/**
* 等待回答列表
* @param labelid
* @param pageable
* @return
*/
@Query(value = "SELECT * FROM tb_problem, tb_pl WHERE id = problemid AND labelid = ? AND reply = 0 ORDER BY createtime DESC", nativeQuery = true)
public Page<Problem> waitList(String labelid, Pageable pageable);
(2)ProblemService新增方法
/**
* 最新回答列表
* @param labelid
* @param page
* @param rows
* @return
*/
public Page<Problem> newList(String labelid, int page, int rows){
Pageable pageable = PageRequest.of(page-1, rows);
return problemDao.newList(labelid, pageable);
}
/**
* 热门问答列表
* @param labelid
* @param page
* @param rows
* @return
*/
public Page<Problem> hotList(String labelid, int page, int rows){
Pageable pageable = PageRequest.of(page-1, rows);
return problemDao.newList(labelid, pageable);
}
/**
* 等待回答列表
* @param labelid
* @param page
* @param rows
* @return
*/
public Page<Problem> waitList(String labelid, int page, int rows){
Pageable pageable = PageRequest.of(page-1, rows);
return problemDao.newList(labelid, pageable);
}
(3)ProblemController新增方法
/**
* 最新回答列表
* @param labelid
* @param page
* @param size
* @return
*/
@GetMapping("/newlist/{labelid}/{page}/{size}")
public Result newList(@PathVariable String labelid,
@PathVariable int page,
@PathVariable int size){
Page<Problem> pageData = problemService.newList(labelid, page, size);
return new Result(true, StatusCode.OK, "查询成功",
new PageResult<Problem>(pageData.getTotalElements(), pageData.getContent()));
}
/**
* 热门问答列表
* @param labelid
* @param page
* @param size
* @return
*/
@GetMapping("/hotlist/{labelid}/{page}/{size}")
public Result hotList(@PathVariable String labelid,
@PathVariable int page,
@PathVariable int size){
Page<Problem> pageData = problemService.hotList(labelid, page, size);
return new Result(true, StatusCode.OK, "查询成功",
new PageResult<Problem>(pageData.getTotalElements(), pageData.getContent()));
}
/**
* 等待回答列表
* @param labelid
* @param page
* @param size
* @return
*/
@GetMapping("/waitlist/{labelid}/{page}/{size}")
public Result waitList(@PathVariable String labelid,
@PathVariable int page,
@PathVariable int size){
Page<Problem> pageData = problemService.waitList(labelid, page, size);
return new Result(true, StatusCode.OK, "查询成功",
new PageResult<Problem>(pageData.getTotalElements(), pageData.getContent()));
}```