美文网首页Java编程
基于Spring Data JPA框架的文章归档实现

基于Spring Data JPA框架的文章归档实现

作者: smileNicky | 来源:发表于2017-04-06 22:06 被阅读109次

目录

[TOC]

前言

最近在写自己的个人博客系统,框架采用SpringMVC、Spring4.0、Spring Data/JPA组合,本博客就文档归档功能在Spring Data JPA框架下是如何实现的进行记录。

文章信息设计

数据暂时这样设计,仅供学习参考,对于文章评论回复,栏目之间的关联还没设计,不过本博客的目的是记录文档归档功能的实现,这个并不会影响


这里写图片描述

文档归档信息查询

然后介绍点击文档归档信息后,获取文章信息的实现,其实也就是按年月查询文档信息

在Repository类里添加方法:

/**
     * 按月份获取文章信息
     * @param month
     *          月份数
     * @return
     */
    @Query("from Article a where date_format(a.articleTime,'%Y%m')=date_format((:yearmonth),'%Y%m') "
            + "order by articleTime desc")
    public List<Article> findArticleByMonth(@Param("yearmonth")Date yearmonth);

Service类里调用:

    /**
     * 按月份获取文章信息
     * @param month
     * @return
     */
    @Transactional
    public List<Article> findArticleByMonth(Date month){
        return articleRepository.findArticleByMonth(month);
    }

在JSP页面写入,getArchiveArticles.do就是要访问的url,传入yearmonth参数就可以

<h2><p>文章归档</p></h2>
<ul class="news">
  <c:choose>
    <c:when test="${not empty archiveArticles }">
        <c:forEach items="${archiveArticles }" var="ac">
        <li><a href="getArchiveArticles.do?yearmonth=${ac[0]}-${ac[1]}">
        ${ac[0]}年${ac[1]}月(${ac[2] })</a></li>
        </c:forEach>
    </c:when>
    <c:otherwise>
        <li><a href="#">没有相关数据</a></li>
    </c:otherwise>  
  </c:choose>
</ul>

在Controller类里进行处理:

@RequestMapping("/getArchiveArticles")
    public ModelAndView getArticleByMonth(HttpServletRequest request){
        String yearMonthString = request.getParameter("yearmonth");
        System.out.println("month:"+yearMonthString);
        ModelAndView mv = this.getModelAndView();
        
        Date yearmonth = DateUtils.parse("yyyy-MM", yearMonthString);
        
        List<Article> articles = articleService.findArticleByMonth(yearmonth);

        mv.addObject("articles", articles);
        mv.setViewName("myblog/article/archive_articles");
        return mv;
    }
这里写图片描述

附录(工具类、公共类代码)

DateUtils.java、BaseController.java类
DateUtil.java

package net.myblog.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import net.myblog.core.Constants;

public class DateUtils {
    
    public static String formatDate(Date date) throws ParseException{
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(date);
    }
    
     /**
       * 解析日期,注:此处为严格模式解析,即20151809这样的日期会解析错误
       * 
       * @param pattern
       * @param date
       * @return
       */
      public static Date parse(String pattern, String date){
        return parse(pattern, date, Constants.LOCALE_CHINA);
      }

      /**
       * 解析日期,注:此处为严格模式解析,即20151809这样的日期会解析错误
       * 
       * @param pattern
       * @param date
       * @param locale
       * @return
       */
      public static Date parse(String pattern, String date, Locale locale){
        SimpleDateFormat format = new SimpleDateFormat(pattern, locale);
        format.setLenient(false);
        Date result = null;
        try{
          result = format.parse(date);
        }catch(Exception e){
          e.printStackTrace();
        }

        return result;
      }

}

BaseController.java:

package net.myblog.web.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

public class BaseController {
    
    /**
     * 得到request对象
     */
    public HttpServletRequest getRequest() {
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
        
        return request;
    }
    
    /**
     * 得到ModelAndView
     */
    public ModelAndView getModelAndView(){
        return new ModelAndView();
    }


}

相关文章

网友评论

    本文标题:基于Spring Data JPA框架的文章归档实现

    本文链接:https://www.haomeiwen.com/subject/hnccattx.html