个人博客

1.1使用工具mybatis-generator自动生成Mybatis代码

参考CSDN文章地址

1.2使用Bootstrap前端框架

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。

Bootstrap官网地址

1.3使用模板语言Thymeleaf进行开发

介绍模板语言Thymeleaf的好文章

1.4部署项目到服务器的步骤及方法

1.用maven的package命令打包项目成为jar包

2.用一些FTP软件将本地的jar包上传到服务器上

3.使用Linux命令运行jar包,项目启动

部署服务器参考的文章1

1.5 代码展示

前端代码:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>论坛社区</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="/css/bootstrap.css"/>
    <link rel="stylesheet" href="/css/bootstrap-theme.css"/>
    <link rel="stylesheet" href="/css/forum.css"/>
    <script src="/js/jquery-3.5.1.min.js"></script>
    <script src="/js/bootstrap.min.js" type="application/javascript"></script>
</head>
<script type="application/javascript">
    window.onload=function () {
        var closable = window.localStorage.getItem("closable");
        if(closable=="true"){
            window.close();
            window.localStorage.removeItem("closable");
        }
    }
</script>
<body>
<div th:insert="~{navigation::nav}"></div>
<div class="container-fluid main">
    <div class="row">
        <div class="col-lg-9 col-md-9  col-sm-9 col-xs-9">
            <h2><span class="glyphicon glyphicon-list" aria-hidden="true"></span>发现</h2>
            <hr>
            <div class="media" th:each="question:${pagination.data}">
                <div class="media-left">
                    <a href="#">
                        <img class="media-object img-rounded"
                             th:src="${question.user.avatarUrl}">
                    </a>
                </div>
                <div class="media-body">
                    <h4 class="media-heading">
                        <a th:text="${question.title}" th:href="@{'/question/'+${question.id}}" ></a>
                    </h4>
<!--                    <span th:text="${question.description}"></span>-->
                    <span class="text-desc">
                        <span th:text="${question.commentCount}"></span>个回复•
                        <span th:text="${question.viewCount}"></span>次浏览•发布时间:
                        <span th:text="${#dates.format(question.gmtCreate,'yyyy-MM-dd HH:mm')}"></span>
                    </span>
                </div>
            </div>
            <nav aria-label="Page navigation">
                <ul class="pagination">
                    <li th:if="${pagination.showFirstPage}">
                        <a th:href="@{/(page=1,search=${search})}" aria-label="Previous">
                            <span aria-hidden="true">&lt;&lt;</span>
                        </a>
                    </li>
                    <li th:if="${pagination.showPrevious}">
                        <a th:href="@{/(page=${pagination.page}-1,search=${search})}" aria-label="Previous">
                            <span aria-hidden="true">&lt;</span>
                        </a>
                    </li>
                    <li th:each="page:${pagination.pages}" th:class="${pagination.page==page}?'active':''">
                        <a th:href="@{/(page=${page},search=${search})}" th:text="${page}">
                        </a>
                    </li>
                    <li th:if="${pagination.showNext}">
                        <a th:href="@{/(page=${pagination.page}+1,search=${search})}" aria-label="Previous">
                            <span aria-hidden="true">&gt;</span>
                        </a>
                    </li>
                    <li th:if="${pagination.showEndPage}">
                        <a th:href="@{/(page=${pagination.totalPage},search=${search})}" aria-label="Previous">
                            <span aria-hidden="true">&gt;&gt;</span>
                        </a>
                    </li>
                </ul>
            </nav>
        </div>
        <div class="col-lg-3 col-md-3  col-sm-3 col-xs-3">
            <h3 style="margin-left: 109px">马尔济斯</h3>
            <img src="/img/dog.jpg" width="100%">
        </div>
    </div>
</div>
<div th:insert="~{footer::foot}"></div>
</body>
</html>

controller层代码:

package com.chen.forum.controller;

import com.chen.forum.DTO.PageDTO;
import com.chen.forum.DTO.QuestionDTO;
import com.chen.forum.Service.QuestionService;
import com.chen.forum.mapper.QuestionMapper;
import com.chen.forum.mapper.UserMapper;
import com.chen.forum.model.Question;
import com.chen.forum.model.User;
import com.chen.forum.model.UserExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Controller
public class IndexController {

    @Autowired
    private UserMapper userMapper;
    @Autowired
    private QuestionService questionService;

    @GetMapping("/")
    public String index(HttpServletRequest request,
                            Model model,
                        @RequestParam(name="page",defaultValue ="1" ) Integer page,
                        @RequestParam(name="size",defaultValue = "5") Integer size,
                        @RequestParam(name="search",required = false) String search){
        PageDTO questionList= questionService.list(search,page,size);
        model.addAttribute("pagination",questionList);
        model.addAttribute("search",search);
        return "index";
    }
}

service层代码:

public PageDTO list(String search,Integer page, Integer size) {
        Integer offset=size*(page-1);
        String replacesearch=null;
        if(search!=null){
            replacesearch = search.replace(" ", "|").replace(",", "|");
        }
        QuestionQueryDTO questionQueryDTO = new QuestionQueryDTO();
        questionQueryDTO.setSearch(replacesearch);
        questionQueryDTO.setOffset(offset);
        questionQueryDTO.setSize(size);
        List<Question> list = questionExtMapper.selectBySearch(questionQueryDTO);
        ArrayList<QuestionDTO> questionDTOArrayList = new ArrayList<>();
        PageDTO pageDTO = new PageDTO();
        for(Question question:list){
            User user=userMapper.selectByPrimaryKey(question.getCreator());
            QuestionDTO questionDTO = new QuestionDTO();
            BeanUtils.copyProperties(question,questionDTO);
            questionDTO.setUser(user);
            questionDTOArrayList.add(questionDTO);
        }
        pageDTO.setData(questionDTOArrayList);
        Integer totalcount=questionExtMapper.countBySearch(questionQueryDTO);
        pageDTO.setPageDTO(totalcount,page,size);
        return pageDTO;
    }
package com.chen.forum.DTO;

import com.chen.forum.model.Question;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
@Data
public class PageDTO<T>{
    private List<T> data;
    private boolean showPrevious;
    private boolean showFirstPage;
    private boolean showNext;
    private boolean showEndPage;
    private Integer page;
    private List<Integer> pages=new ArrayList<>();
    private Integer totalPage;

    public void setPageDTO(Integer totalcount, Integer page, Integer size) {
        this.page=page;
        if(totalcount%size==0){
            totalPage=totalcount/size;
        }
        else{
            totalPage=totalcount/size+1;
        }
        pages.add(page);
        for(int i=1;i<=3;i++){
            if(page-i>0){
                pages.add(0,page-i);
            }
            if(page+i<=totalPage){
                pages.add(page+i);
            }
        }
        if(page==1){
            showPrevious=false;
        }
        else {
            showPrevious=true;
        }
        if(page==totalPage){
            showNext=false;
        }
        else{
            showNext=true;
        }
        if(pages.contains(1)){
            showFirstPage=false;
        }else{
            showFirstPage=true;
        }
        if(pages.contains(totalPage)){
            showEndPage=false;
        }
        else {
            showEndPage=true;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值