個人博客項目文章歸檔實現(xiàn)

      網(wǎng)友投稿 711 2022-05-29

      目錄

      文章目錄

      目錄

      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

      個人博客項目之文章歸檔實現(xiàn)

      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{ /** * 文章歸檔信息獲取 * @return */ @Query(value="select year(a.articleTime) as year,month(a.articleTime) as month," + "count(a) as count from Article a group by year(a.articleTime),month(a.articleTime)", countQuery="select count(1) from (select count(1) from Article a group by year(a.articleTime),month(a.articleTime))") public List findArticleGroupByTime(); }

      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 findArticleGroupByTime(){ return articleRepository.findArticleGroupByTime(); } }

      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 archiveArticles = articleService.findArticleGroupByTime(); model.addAttribute("archiveArticles", archiveArticles); mv.setViewName("myblog/frame/index"); return mv; } }

      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

      findArticleByMonth(@Param("yearmonth")Date yearmonth);

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      Service類里調用:

      /** * 按月份獲取文章信息 * @param month * @return */ @Transactional public List

      findArticleByMonth(Date month){ return articleRepository.findArticleByMonth(month); }

      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

      articles = articleService.findArticleByMonth(yearmonth); mv.addObject("articles", articles); mv.setViewName("myblog/article/archive_articles"); return mv; }

      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小時內刪除侵權內容。

      上一篇:同一局域網(wǎng),ping不通某臺電腦
      下一篇:K8S實踐Traefik-Ingress部署
      相關文章
      亚洲综合一区二区| 精品亚洲一区二区| 亚洲国产成人超福利久久精品| 久久精品九九亚洲精品天堂| 亚洲无人区一区二区三区| 亚洲伊人久久成综合人影院| 亚洲国产天堂久久综合| 亚洲AV成人一区二区三区观看| 国产亚洲中文日本不卡二区| 亚洲精品天堂在线观看| 2017亚洲男人天堂一| 亚洲中文字幕日本无线码| 亚洲一日韩欧美中文字幕在线 | 在线aⅴ亚洲中文字幕| 亚洲午夜一区二区三区| 亚洲天然素人无码专区| 亚洲αⅴ无码乱码在线观看性色| 亚洲av无码一区二区三区四区| 亚洲av成人一区二区三区在线播放 | 亚洲一区二区三区久久久久| 亚洲综合久久久久久中文字幕| 亚洲精品国产情侣av在线| 亚洲国产精品美女| 亚洲an日韩专区在线| 亚洲一区二区观看播放| 亚洲av日韩综合一区久热| 自拍偷自拍亚洲精品播放| 久久亚洲精品11p| 久久99亚洲综合精品首页| 亚洲国产日韩在线视频| 亚洲AV无码专区国产乱码4SE| 久久精品国产亚洲av高清漫画| 亚洲精品午夜无码电影网| 亚洲日韩国产精品乱| 国产亚洲精品精品国产亚洲综合 | 精品亚洲成在人线AV无码| 亚洲午夜无码久久久久小说| 精品亚洲成A人在线观看青青| 国产日产亚洲系列最新| 亚洲精品狼友在线播放| 久久精品视频亚洲|