個人博客項目之文章歸檔實現(xiàn)
目錄
文章目錄
目錄
VO類:全部采用注解,注意因為我數(shù)據(jù)庫表名為article,所以不需要寫@Table注解,表名為其它的話,就需要自己添加@Table注解了
package net.myblog.entity; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** * 博客系統(tǒng)文章信息的實體類 * @author Nicky */ @Entity public class Article { /** 文章Id,自增**/ private int articleId; /** 文章名稱**/ private String articleName; /** 文章發(fā)布時間**/ private Date articleTime; /** 圖片路徑,測試**/ private String imgPath; /** 文章內容**/ private String articleContent; /** 查看人數(shù)**/ private int articleClick; /** 是否博主推薦。0為否;1為是**/ private int articleSupport; /** 是否置頂。0為;1為是**/ private int articleUp; /** 文章類別。0為私有,1為公開,2為僅好友查看**/ private int articleType; @GeneratedValue @Id public int getArticleId() { return articleId; } public void setArticleId(int articleId) { this.articleId = articleId; } @Column(length=100, nullable=false) public String getArticleName() { return articleName; } public void setArticleName(String articleName) { this.articleName = articleName; } @Temporal(TemporalType.DATE) @Column(nullable=false, updatable=false) public Date getArticleTime() { return articleTime; } public void setArticleTime(Date articleTime) { this.articleTime = articleTime; } @Column(length=100) public String getImgPath() { return imgPath; } public void setImgPath(String imgPath) { this.imgPath = imgPath; } @Column(nullable=false) public String getArticleContent() { return articleContent; } public void setArticleContent(String articleContent) { this.articleContent = articleContent; } public int getArticleClick() { return articleClick; } public void setArticleClick(int articleClick) { this.articleClick = articleClick; } public int getArticleSupport() { return articleSupport; } public void setArticleSupport(int articleSupport) { this.articleSupport = articleSupport; } public int getArticleUp() { return articleUp; } public void setArticleUp(int articleUp) { this.articleUp = articleUp; } @Column(nullable=false) public int getArticleType() { return articleType; } public void setArticleType(int articleType) { this.articleType = articleType; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
###代碼實現(xiàn)步驟
文章表里有很多數(shù)據(jù),要按照年月獲取文章進行歸檔的話,我們可以使用如下SQL對數(shù)據(jù)進行分組
SELECT YEAR(articleTime) AS 'year',MONTH(articleTime) AS 'month',COUNT(*) AS 'count' FROM article GROUP BY YEAR(articleTime) DESC,MONTH(articleTime);
1
2
然后編寫數(shù)據(jù)庫層的Repository類,類實現(xiàn)Spring Data JPA提供的接口
package net.myblog.repository; import java.util.Date; import java.util.List; import net.myblog.entity.Article; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; public interface ArticleRepository extends PagingAndSortingRepository
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
然后在Service類,用@Autowired注解調用
package net.myblog.service; import java.util.Date; import java.util.List; import net.myblog.entity.Article; import net.myblog.repository.ArticleRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort.Direction; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class ArticleService { @Autowired ArticleRepository articleRepository; /** * 文章歸檔信息獲取 * @return */ @Transactional public List
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
然后在Controller里調用,用的是SpringMVC框架
package net.myblog.web.controller; import java.util.ArrayList; import java.util.List; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.myblog.service.ArticleService; import net.sf.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort.Direction; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class BlogIndexController extends BaseController{ @Autowired ArticleService articleService; /** * 訪問博客主頁 * @return */ @RequestMapping(value="/toblog",produces="text/html;charset=UTF-8") public ModelAndView toBlog(HttpServletRequest request, HttpServletResponse response, Model model)throws ClassNotFoundException{ //獲取歸檔文章信息 List
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
在JSP頁面調用顯示:
文章歸檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
效果如圖所示:
###文檔歸檔信息查詢
然后介紹點擊文檔歸檔信息后,獲取文章信息的實現(xiàn),其實也就是按年月查詢文檔信息
在Repository類里添加方法:
/** * 按月份獲取文章信息 * @param month * 月份數(shù) * @return */ @Query("from Article a where date_format(a.articleTime,'%Y%m')=date_format((:yearmonth),'%Y%m') " + "order by articleTime desc") public List
1
2
3
4
5
6
7
8
9
10
Service類里調用:
/** * 按月份獲取文章信息 * @param month * @return */ @Transactional public List
1
2
3
4
5
6
7
8
9
在JSP頁面寫入,getArchiveArticles.do就是要訪問的url,傳入yearmonth參數(shù)就可以
文章歸檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
在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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
###附錄(工具類、公共類代碼)
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; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
JSP
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。