SSH学习笔记(8)__Hibernate_查询操作
发布日期:2021-04-30 21:03:31 浏览次数:102 分类:精选文章

本文共 5283 字,大约阅读时间需要 17 分钟。

Day04

目录标题

1. 对象导航查询

查询某个客户里面所有联系人过程,使用对象导航实现。

代码

// 根据cid=1客户,再查询这个客户里面所有联系人Customer customer = session.get(Customer.class, 1);// 直接得到客户里面联系人的set集合Set
linkman = customer.getSetLinkMan();// 发送语句System.out.println(linkman.size());

2. OID查询

根据id查询记录

代码

// 根据cid=1客户,再查询这个客户里面所有联系人Customer customer = session.get(Customer.class, 1);

3. HQL查询

hibernate query language,用于对实体类进行查询操作。

HQL常用语句

  • 查询所有记录
  • 条件查询
  • 模糊查询
  • 排序查询
  • 分页查询
  • 投影查询
  • 聚集函数
  • 查询所有客户

    // 创建query对象Query query = session.createQuery("from Customer");// 调用方法得到结果List
    list = query.list();// 遍历结果for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    条件查询

    // 创建query对象Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?");// 设置参数值query.setParameter(0, 1); // cid=1query.setParameter(1, "百度"); // custName=百度// 获取结果List
    list = query.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    模糊查询

    // 创建query对象Query query = session.createQuery("from Customer c where c.custName like ?");// 设置参数值query.setParameter(0, "%百%"); // 模糊查询百度// 获取结果List
    list = query.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    排序查询

    // 创建query对象Query query = session.createQuery("from Customer order by cid desc");// 获取结果List
    list = query.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    分页查询

    // 创建query对象Query query = session.createQuery("from Customer");// 设置分页参数query.setFirstResult(0); // 起始位置query.setMaxResults(3); // 每页显示的记录数// 获取结果List
    list = query.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    投影查询

    // 创建query对象Query query = session.createQuery("select custName from Customer");// 获取结果List list = query.list();for (Object object : list) {    System.out.println(object);}

    聚集函数

    // 查询客户总数Query query = session.createQuery("select count(*) from Customer");Object obj = query.uniqueResult();Long lobj = (Long) obj;int count = lobj.intValue();System.out.println(count);

    4. QBC查询

    使用Criteria对象实现查询

    查询所有

    // 创建Criteria对象Criteria criteria = session.createCriteria(Customer.class);// 获取结果List
    list = criteria.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    条件查询

    // 创建Criteria对象Criteria criteria = session.createCriteria(Customer.class);// 添加条件criteria.add(Restrictions.eq("cid", 1));criteria.add(Restrictions.like("custName", "%百%"));// 获取结果List
    list = criteria.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    排序查询

    // 创建Criteria对象Criteria criteria = session.createCriteria(Customer.class);// 设置排序规则criteria.addOrder(Order.desc("cid"));// 获取结果List
    list = criteria.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    分页查询

    // 创建Criteria对象Criteria criteria = session.createCriteria(Customer.class);// 设置分页参数criteria.setFirstResult(0);criteria.setMaxResults(3);// 获取结果List
    list = criteria.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    统计查询

    // 创建Criteria对象Criteria criteria = session.createCriteria(Customer.class);// 设置投影操作criteria.setProjection(Projections.rowCount());// 获取结果Object obj = criteria.uniqueResult();Long lobj = (Long) obj;int count = lobj.intValue();System.out.println(count);

    离线查询

    // 创建DetachedCriteria对象DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);// 获取执行的Criteria对象Criteria criteria = detachedCriteria.getExecutableCriteria(session);// 获取结果List
    list = criteria.list();for (Customer customer : list) { System.out.println(customer.getCid() + "::" + customer.getCustName());}

    HQL多表查询

    Mysql多表查询

  • 内连接
  • 左外连接
  • 右外连接
  • HQL多表查询

  • 内连接
  • 左外连接
  • 右外连接
  • 迫切内连接
  • 迫切左外连接
  • HQL内连接

    // 创建query对象Query query = session.createQuery("from Customer c inner join c.setLinkMan");// 获取结果List list = query.list();

    迫切内连接

    // 创建query对象Query query = session.createQuery("from Customer c inner join fetch c.setLinkMan");// 获取结果List list = query.list();

    HQL左外连接

    // 创建query对象Query query = session.createQuery("from Customer c left outer join c.setLinkMan");// 获取结果List list = query.list();

    迫切左外连接

    // 创建query对象Query query = session.createQuery("from Customer c left outer join fetch c.setLinkMan");// 获取结果List list = query.list();

    Hibernate检索策略

  • 立即查询
  • 延迟查询
  • 延迟查询

    // 延迟查询客户Customer customer = session.load(Customer.class, 2);// 获取客户信息System.out.println(customer.getCid());System.out.println(customer.getCustName());

    关联级别延迟

    // 根据cid=1客户,再查询这个客户里面所有联系人Customer customer = session.get(Customer.class, 1);// 获取客户的联系人Set
    linkman = customer.getSetLinkMan();// 输出联系人数量System.out.println(linkman.size());

    批量抓取

    // 查询所有客户Criteria criteria = session.createCriteria(Customer.class);List
    list = criteria.list();// 获取每个客户的联系人for (Customer customer : list) { Set
    linkman = customer.getSetLinkMan(); for (LinkMan linkMan : linkman) { System.out.println(linkMan.getLkm_id() + "::" + linkMan.getLkm_name()); }}

    批量设置

    上一篇:NIO-NIO的概述及应用(三)
    下一篇:Leetcode--12. 整数转罗马数字

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2026年06月11日 02时49分52秒