牛客网项目—开发社区首页
视频连接:开发社区首页_哔哩哔哩_bilibili
代码地址:Community: msf begin 仿牛客论坛项目 (gitee.com)
本文是对仿牛客论坛项目的学习,学习本文之前需要了解Java开发的常用框架,例如SpringBoot、Mybatis等等。如果你也在学习牛客网论坛项目,希望我的文章能够对你有所帮助。
完成的效果如下:可以在首页看出所有人的评论,通过点击页面跳转到其他页面。
开发社区首页设计到的功能
1、建立User和discussPost实体,开发相应的Dao,Service和Controller。注意在springboot开发时需要完善注解哦。
public class User {private int id;private String username;private String password;private String salt;private String email;private int type;private int status;private String activationCode;private String headerUrl;private Date createTime;
}public class DiscussPost {private int id;private String userId;private String title;private String content;private int type;private int status;private Date createTime;private int commentCount;private double score;
}
实体是非常好实现的,就是将数据库中的字段和Java中的类相对容易。
2、实现Dao层,由于首页需要对评论进行显示,所以discussPostMapper中有一个方法查询所有帖子,由于需要进行分页,最好也有一个查询帖子个数的方法。
@Mapper
public interface DiscussPostMapper {/*** 在查询全部帖子时候,不需要userId,查看自己主页发布的帖子需要userId* @param userId if userId = 0:表示查首页,否则查自己* @param offset 分页起始行号* @param limit 每页查询的数据条数* @return*/List<DiscussPost> selectDiscussPosts(int userId,int offset,int limit);/*** 在写sql时候,需要用到动态条件,并且有且仅有一个条件则必须去别名* @param userId* @return*/int selectDiscussPostRows(@Param("userId") int userId);}
这里有一个坑需要记录一下,在写动态sql时候,有且仅有一个条件则必须起别名。
UserMapper也贴在下面了,包括一些常用的查询和更新方法等等。
@Mapper
public interface UserMapper {User selectById(int id);User selectByName(String name);User selectByEmail(String email);int insertUser(User user);int updateStatus(int id, int status);int updateHeader(int id, String headerUrl);int updatePassword(int id, String password);}
到此Dao层基本完成,需要完成具体mapper.xml实现,这里就不进行粘贴了。最最最重要的是,测试。千万不要把一个功能全部完成了在测试,应该是分阶段的测试,在某一个阶段性小功能实现之后就进行测试。
3、 Controller层的实现:我们需要将所有的帖子和User进行对应起来以后。我们就需要完成分页显示,因此也需要处理分页的信息,例如offset,limit等等。在这里通过设计一个Page类对分页信息进行封装
@Controller
public class DiscussPostController {@Autowiredprivate UserService userService;@Autowiredprivate DiscussPostService discussPostService;@GetMapping("/index")public String getIndexPage(Model model, Page page) {page.setPath("/index");page.setRows(discussPostService.selectDiscussPostRows(0));List<DiscussPost> list = discussPostService.selectDiscussPosts(0, page.getOffset(), page.getLimit());List<Map<String, Object>> discussPosts = new ArrayList<>();if (null != list) {for (DiscussPost post : list) {Map<String, Object> map = new HashMap<>();map.put("post", post);String userId = post.getUserId();User user = userService.selectById(Integer.parseInt(userId));map.put("user", user);discussPosts.add(map);}}model.addAttribute("discussPosts", discussPosts);// 可以省略的原因,是前端控制器,已经将page装入了Model中// model.addAttribute("page",page);return "/index";}}public class Page {// 数据总数private int rows;// 当前页码private int current = 1;private int limit = 10;// 查询路径(用于复用分页链接)private String path;
}
1、在首页供能实现中,我遇到的问题:主要是前端问题。因为跟着视频做的时候,并没有实现定义第几页进行跳转,而仅仅实现了下一页,首页等功能,因此在这里需要实现页码点击跳转的功能。
2、第二个遇到的问题是,js、css等没有渲染,因为你的当前网络不能访问到外网。需要搭建梯子对需要的js和css进行下载,下载之后就可以访问了。登录VPN之后然后在访问首页,js和css就进行了渲染。