【日记本系统】7–日志分类

2016-12-20 19:57    690人浏览    标签:,     

日志分类:

    1,按日志类别分类

    2,按日志日期分类

在上面的DiaryDao中已经写了diaryCountList这个方法,。这个方法就是根据日志的日期分类,具体说是根据将所有的日志按照不同的月份分类,另一种说法就是文章归档。

日志日期归档SQL:

SELECT
	DATE_FORMAT(releaseDate, '%Y-%m') AS releaseDateStr,
	COUNT(*) AS diaryCount
FROM
	t_diary
GROUP BY
	DATE_FORMAT(releaseDate, '%Y-%m')
ORDER BY
	DATE_FORMAT(releaseDate, '%Y-%m') DESC;

将sql发在mysqlo中查询结果:

blob.png

这里一的Date_FORMAT()参数'%Y-%m'如果变成‘%Y年%m月’是可以直接查询出日期可以带年的,但是因为不知道什么原因,查出来是乱码,各种数据编码也都换了,也还是不行,所以这里我按照“年-月”的方法查出结果来,然后在获取值的时候修改下值也是可以的 ,具体的方法

public List<Diary> diaryCountList(Connection con)throws Exception{
		List<Diary> diaryCountList=new ArrayList<Diary>();
		String sql="SELECT DATE_FORMAT(releaseDate,'%Y-%m') as releaseDateStr ,COUNT(*) AS diaryCount  FROM t_diary GROUP BY DATE_FORMAT(releaseDate,'%Y-%m') ORDER BY DATE_FORMAT(releaseDate,'%Y-%m') DESC;";
		PreparedStatement pstmt=con.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			Diary diary=new Diary();
			diary.setReleaseDateStr(rs.getString("releaseDateStr").replace("-", "年")+"月");
			diary.setDiaryCount(rs.getInt("diaryCount"));
			diaryCountList.add(diary);
		}
		return diaryCountList;
	}

这里rs.getString("releaseDateStr").replace("-", "年")+"月"相当于先替换结果中的-再加个字符“月”。

然后就是日志类别分类

这个方法这里重新添加一个Dao,DiaryTypeDao,在里面添加diaryTypeCountList()方法,返回一个List

日志按类别分类:

SELECT
	diaryTypeId,
	typeName,
	COUNT(diaryId) AS diaryCount
FROM
	t_diary
RIGHT JOIN t_diaryType ON t_diary.typeId = t_diaryType.diaryTypeId
GROUP BY
	typeName;

查询的结果:

blob.png

具体方法Java代码:

DiaryTypeDao.java

public List<DiaryType> diaryTypeCountList(Connection con)throws Exception{
		List<DiaryType> diaryTypeCountList=new ArrayList<DiaryType>();
		String sql="SELECT diaryTypeId,typeName,COUNT(diaryId) as diaryCount FROM t_diary RIGHT JOIN t_diaryType ON t_diary.typeId=t_diaryType.diaryTypeId GROUP BY typeName;";
		PreparedStatement pstmt=con.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			DiaryType diaryType=new DiaryType();
			diaryType.setDiaryTypeId(rs.getInt("diaryTypeId"));
			diaryType.setTypeName(rs.getString("typeName"));
			diaryType.setDiaryCount(rs.getInt("diaryCount"));
			diaryTypeCountList.add(diaryType);
		}
		return diaryTypeCountList;

在Dao中已经获取到这两个分类的数据list了,然后在IndexServlet中获取到这个list,再将list放在session中,前台则取到session中的值,显示出来,在上一个文档中我们是将diaryList放在request中,这里却将分类的list放在session中,为什么呢,

因为页面是在变化的,上面的导航点击都会出现不同的页面,但是是只下面的主体部分会变化,右边的个人中心和分类的内容是不会变化的,不会变化的东西我们就放在session中好点,每次页面变化都刷新一下整个页面,右边的重新获取,但是数据却又不变,所以这里没有必要再继续获取。session是对整个网站都有效,request是只对一个请求有效。用request中的数据返回到前台去,如果再有请求的话,是无法获取到上一次的数据的

blob.png

IndexServlet添加获取类别数据:

先new一个dao对象

DiaryDao diaryDao=new DiaryDao();
DiaryTypeDao diaryTypeDao = new DiaryTypeDao();

再通过diaryTypeDao实体调用dao里面的方法,并保存到session中

session.setAttribute("diaryCountList", diaryDao.diaryCountList(con));
session.setAttribute("diaryTypeCountList", diaryTypeDao.diaryTypeCountList(con));

前台通过jstl标签库,将session中的数据提取出来

<div class="datas">
		<ul>						
		      <c:forEach var="diaryTypeCount" items="${diaryTypeCountList }">
					<li><span><a href="#">${diaryTypeCount.typeName }(${diaryTypeCount.diaryCount })</a></span></li>
			   </c:forEach>
		</ul>
</div>
<div class="datas">
	<ul>
		<c:forEach var="diaryCount" items="${diaryCountList }">
		<li><span><a href="#">
					${diaryCount.releaseDateStr }(${diaryCount.diaryCount })
			</a></span></li>
		 </c:forEach>
	</ul>
</div>

先将连接写成空连接,下一讲教程将进行完善。

运行效果:

blob.png

项目源码地址:http://pan.baidu.com/s/1eSxDJCA

相关文章

留言评论

评论已关闭。