目录
[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();
}
}
网友评论