使用所有登录时间按日期对查询进行休眠分组
Hibernate query to group by Date with all logintime
我想显示特定日期的每个登录时间。但我得到了每个时间的日期和时间。像
result is:-
date logintime
2016-03-31 2016-03-31 (time)
2016-03-31 2016-03-31 (time)
2016-03-31 2016-03-31 (time)
But I want:-
date logintime
2016-03-31 2016-03-31 (time)
2016-03-31 (time)
2016-03-31 (time)
USERDAO类:
public List<LoginLog> UserHistory(User user){
String sql="from LoginLog where user = :user";
TypedQuery<LoginLog> query = em.createQuery(sql, LoginLog.class);
query.setParameter("user", user);
List<LoginLog> logs = query.getResultList();
return logs;
}
默认用户类
@Override
@Transactional
public LoginLog punchLoginTime(User user) {
LoginLog log = new LoginLog();
log.setLoginTime(new Date());
log.setUser(user);
loginLogDao.create(log);
return log;
}
@Override
@Transactional
public LoginLog punchLogoutTime(User user) {
LoginLog log = getOpenUserLoginLog(user);
log.setLogoutTime(new Date());
long diff=log.getLogoutTime().getTime()-log.getLoginTime().getTime();
log.setTotalTime(diff);
log = loginLogDao.update(log);
return log;
}
@Override
public boolean hasUserStarted(User user) {
LoginLog log = loginLogDao.getOpenLoginLog(user);
if (log == null) {
return false;
} else {
return true;
}
}
@Override
public LoginLog getOpenUserLoginLog(User user) {
return loginLogDao.getOpenLoginLog(user);
}
@Override
public List<LoginLog> UserHistroy(User user) {
return loginLogDao.UserHistory(user);
}
LOGIN_CONTROLLER类
@RequestMapping(value = "/userloginhistory", method = { RequestMethod.GET })
public String loginHistory(HttpServletRequest request, Model model) {
List<LoginLog> logs = userService.UserHistroy(TimesheetSecutiryUtil
.getLoggedInUser(request.getSession()));
model.addAttribute("loginList", logs);
return "userloginhistory";
}
这是Jsp。由于我是新手,有人能告诉我该怎么做吗?(通过hibernate查询或在jsp级别,如何?)谢谢
<table border="1">
<thead>
<tr>
<td>Login Id</td>
<td>Login Time</td>
<td>Logout Time</td>
<td>Total Time(in Minutes)</td>
</tr>
</thead>
<%
List<LoginLog> log = (List<LoginLog>)request.getAttribute("loginList");
if(log != null) {
for(LoginLog login : log) {
%>
<tr>
<td><%=login.getId()%></td>
<td><%=login.getLoginTime()%></td>
<td><%=login.getLogoutTime()%></td>
<td id="a<%=login.getId()%>">
<span id="time<%=login.getId()%>">
<%=login.getTotalTime()%></span> <script>
var milliSeconds = document.getElementById("time<%=login.getId()%>").innerHTML;
var c = convertTime(milliSeconds);
document.getElementById("a<%=login.getId()%>").innerHTML = c;
</script></td>
</tr>
<%
}
}
%>
</table>
如果可以选择使用Guava,则可以轻松地将List<LoginLog>
转换为多映射,并返回ImmutableListMultimap使其可用于JSP文件。例如,
private static class LoginLog {
private Date loginTime;
private Date logoutTime;
LoginLog(Date loginTime) {
this.loginTime = loginTime
}
// Getters and setters
}
以及分组功能
private enum GroupBy implements Function<LoginLog, String> {
LOGIN_TIME
@Override
String apply(LoginLog loginLog) {
return new SimpleDateFormat("yyyy-MM-dd").format(loginLog.loginTime)
}
}
并使用索引方法
ImmutableListMultimap<String, LoginLog> listMultimap = Multimaps.index(logs, GroupBy.LOGIN_TIME);
我不认为你可以用纯HQL查询获得类似于多地图提供的输出,你仍然需要像使用一样获得所有结果
List<LoginLog> logs = query.getResultList();
类似的地图数据结构也可以通过循环遍历logs
列表来生成。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- j查询utc offSets的时差
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何处理node.js节点mongodb中的连接和查询队列
- 如何从 HTML 查询中删除项目
- 从查询字符串参数推断出正确的数据类型
- 将curl查询转换为jQuery.ajax()
- 触发媒体查询断点时刷新页面
- 使用DynamoDB查询返回
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 如何将PHP get查询转换为Meteor's HTTP.get()
- AngularJS:获取链接中没有哈希的查询字符串值
- 捕获初始RedQueryBuilder查询中的SQL问题
- AngularJS,如何更改查询字符串
- 具有大型几何图形的基于沙发的空间查询
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- o数据扩展查询在SystemUserRolesSet上不起作用
- Xpath运行缓慢的查询
- Solr查询以按日期月份获取数据&年
- 使用所有登录时间按日期对查询进行休眠分组