技术总结(四)-Hibernate 多表查询

本文主要介绍了在工作中如何使用Hibernate进行多表查询,特别是针对查询特定时间段内用户每天访问不同企业的次数。通过LogEnt实体类举例,讨论了两种实现方式:执行原生SQL语句和使用HQL。虽然没有涉及分页功能,但提供了获取总记录数的方法。
摘要由CSDN通过智能技术生成

记录一下工作中遇到的问题和解决办法。

最近遇到是一个问题就是通过Hibernate查询多个表,每个表中取几个字段。在这里记录一下解决的办法,和大家交流。

分割线

--------------------------------

一、先跟大家交代一下用到的实体类

LogEnt 记录用户访问企业实体

public class LogEnt{
     private String id;
     private String lcid;//访问企业id
     private String userId; //用户id
     private Date timestamp; //访问时间
}

User  用户

public class User{
      private String userId; //主键
      private String mobile; //手机号
      private String state;   //用户状态
      ...
}
实体都是只写了用到的属性。

二、实现功能

查询在选定的时间段内,用户每天访问的企业数量(不包括重复访问的企业)

三、思路

1、使用Hibernate执行原生sql语句查询多个表实现

2、创建一个包含所需要属性的实体,使用hql实现(界面所需要的属性  用户手机号、访问时间(精确到天)、每天访问次数),没有实现分页功能,使用hql语句查询总记录数


四、实现

(1)、使用Hibernate执行sql实现

//用户手机号、     开始时间、   结束时间、    访问次数
public Page observe(String mobile,String from,String to,String number,Page page){
           boolean flag = true;
           DetachedCriteria logEntCriteria = DetachedCriteria.forClass(LogEnt.class);
           String sql = "select  b.mobile,a.timestamp, count(DISTINCT a.lcid) from log_ent a,user b where a.userid = b.userId and b.state = '1' ";
//根据手机号查询用户Id
            if(!StringUtils.isEmpty(mobile)){
                DetachedCriteria dc = DetachedCriteria.forClass(User.class);
                dc.a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值