一个基于ssm的论坛社区项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/orochi1972/article/details/81151401

这一个多月写了一个Forum论坛项目,这篇文章算是一个总结吧,捋一下整体的流程。


  • 开发环境:idea 2018.01
  • 前端:JQuery+Bootstrap+layui(一个国人的框架,用的比较多,风格很喜欢)
  • 后端:Spring+SpringMVC+Mybatis
  • 数据库:Mysql

首先是项目结构和接口文档:

这里写图片描述
这里写图片描述
这里写图片描述

部分例子:

这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写AA片描述
S

整体功能描述

这里写图片描述

  1. 用户登录注册
    需要判断多种情况,用ajax和后台交互判断用户名是否存在,用户是否被锁定等,记录用户登录日志,更新登陆时间,最后添加到session中。
  2. 发表主题帖
    在提交并保存主题帖中,需要进行相应操作例如主题帖数加一,插入Topic表,作者添加10个积分等等。
  3. 回复主题帖
    在model获得topic和user后,插入回复数据更新回复时间,给用户添加积分,刷新页面等等
  4. 删除帖子
    删帖子,扣积分没啥好说的。
  5. 论坛板块管理
    指定论坛管理员,顶置加精,权限设置等等(暂时写了一部分)。
  6. 用户个人资料管理,头像上传。

数据库设计

数据库采用7张表,自增id,可以找到对应的model层PO类
数据库

是撒

(这里没有对密码进行复杂加密)


持久层设计

此处采用了Mybatis 的generator 生成了PO类,基础mapper文件,dao层接口,后续只需添加相应功能即可。例:

public interface PostMapper {
    int deleteByPrimaryKey(Integer postId);

    int insert(Post record);

    int insertSelective(Post record);

    Post selectByPrimaryKey(Integer postId);

    int updateByPrimaryKeySelective(Post record);

    int updateByPrimaryKeyWithBLOBs(Post record);

    int updateByPrimaryKey(Post record);

    List<Post> selectByTopicId(int topicId);

    Post getHostTopicInnerText(int topicId, int userId);
}

服务层设计

service是业务层,是使用一个或多个模型执行操作的方法。
1. 封装通用的业务逻辑,操作。 如一些数据的检验,可以通用处理。
2. 与数据层的交互。
3. 其他请求:如远程服务获取数据,如第三方api等。

例:

public interface UserService {

    boolean checkLogin(String username, String password);

    int returnSumUser();

    User findUserByName(String username);

    void lockUser(String username);

    boolean isLocked(String username);

    void addCredit(String username, int creditNum);

    void setLoginLogAndDate(String username, Date date, String addr);

    void register(String username, String password);

    User selectByUserId(int id);

    void updateAddressOfPic(int userId,String address);

    UserDetailed findById(int userId);

    List<RecentUser> RecentUserData();
}

controller

部分例子:

@Controller
public class RegisterController {
    @Autowired
    private UserService userService;
    @Autowired
    private ForumService forumService;
    @ApiOperation(value = "返回注册页面",httpMethod = "GET")
    @RequestMapping(value = "/user/register",method = RequestMethod.GET)
    public String reg() {
        return "register";

    }
    @ApiOperation(value = "注册跳转",httpMethod = "POST")
    @RequestMapping(value = "/registerPro", method = RequestMethod.POST)
    public String register(@RequestParam String username, @RequestParam String password) {
        userService.register(username,password);
        return "redirect:/login";
    }

    @RequestMapping(value = "/user/detail/{userId}",method = RequestMethod.GET)
    @ApiOperation(value = "返回个人页面信息",httpMethod = "GET")
    public String userDetail(@PathVariable int userId, Model model) {
        model.addAttribute("username", userService.selectByUserId(userId).getUserName());
        model.addAttribute("info", userService.findById(userId));
        model.addAttribute("topicInfo", forumService.selectByuserId(userId));
        return "userInfo";
    }

    @ResponseBody
    @ApiOperation(value = "上传图片接口",httpMethod = "POST")
    @RequestMapping(value = "/upload/usericon", method = RequestMethod.POST)
    public Object uploadIcon(HttpServletRequest request, MultipartFile file,@RequestParam String id) throws IOException {
        String path= UploadPictureUtil.addMutiparFile(file,request.getSession().getServletContext().getRealPath("/"));
        Map result=new HashMap();
        result.put("path",path);
        result.put("id", id);
        //保存图片链接到数据库
        userService.updateAddressOfPic(Integer.valueOf(id), path);
        return  result;

    }
}

界面不是太丰富,主要用的layui这个基于css,jQuery,js的框架,一些导航,提示信息,布局还是很容易入门的,提别提示一下layui这里在script里写具体操作。

<script>
    layui.use(['jquery', 'layer'], function(){
        var $ = layui.$ //重点处
            ,layer = layui.layer;
        $(document).ready(function(){
            $("#new").click(function () {
                if (${empty user}){
                    layer.msg("请先登录!");
                }else {
                    window.location.href="/addTopic";
                }
            });
        })
    })
</script>

可以参考下载

https://download.csdn.net/download/orochi1972/10617592


一些问题总结

文章很短不能全部贴出代码,总结一下遇到的问题吧。

  1. maven,mvc文件配置
  2. 前端获取数据json,ajax数据交互
  3. pagehelper分页
  4. 测试junit相关问题
  5. restful风格
  6. 上传图片数据库保存再获取
  7. request数据转码UTF-8
  8. swagger2接口文档

没有更多推荐了,返回首页