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()));
}```

相关文章: