hibernate(表查询)

OID查询
  • 什么是OID查询

    根据对象的OID主键进行检索查询

  • OID查询方式

    • get方法

      当get方法被调用的时候就会立即发出sql语句,并且返回的对象也是实际的对象。

      使用get()和普通的单挑查询语句并没有多大区别,当查询不到的时候get()返回null

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Customer customer = session.get(Customer.class, 2);
      System.out.println(customer);
      transaction.commit();
      
    • load方法

      当调用load方法的时候会返回一个目标对象的代理对象,这个代理对象只存储了目标对象的id值。

      只有当调用id值以外的属性值的时候才会发出sql查询,当查询不到的时候load()会报错

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Customer customer = session.load(Customer.class, 2);
      System.out.println(customer.getCust_id()); // 不会进行sql查询
      System.out.println(customer); // 会进行sql查询
      transaction.commit();
      
对象导航查询(了解)

Hibernate根据已经查询到的对象,获得其关联对象的一种查询方式

先查询到联系人,就可以通过联系人获取联系人所关联的客户对象

HQL查询
  • 什么是HQL

    HQL查询:Hibernate Query Language ,Hibernate的查询语言

    是一种面向对象的方式对查询语言,语法类似SQL

    通过session.createQuery(),用于接受HQL的查询方式

  • 查询

    • 简单查询

      Query query = session.createQuery("from Customer ");
      List list = query.list();
      
    • 别名查询

      Query query = session.createQuery("select c from Customer c");
      List list = query.list();
      
    • 排序查询

      Query query = session.createQuery("select c from Customer c order by cust_id");
      List list = query.list();
      
    • 条件查询

      位置绑定:使用 ?位置

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select c from Customer c where cust_name = ?0 and cust_level = ?1 ");
      query.setParameter(0,"王五");
      query.setParameter(1,"1");
      List<Customer> list = query.list();
      System.out.println(list);
      
      transaction.commit();
      

      名称绑定:使用名称 :名称

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select c from Customer c where cust_name = :name and cust_level = :level ");
      query.setParameter("name","王五");
      query.setParameter("level","1");
      List<Customer> list = query.list();
      System.out.println(list);
      
      transaction.commit();
      
    • 投影查询

      查询对象的某个或其他属性

      单个属性

      Query query = session.createQuery("select cust_name from Customer c");
      List<Object> list = query.list()
      

      多个属性

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select cust_name,cust_level from Customer c");
      List<Object[]> list = query.list();
      for (Object[] objects : list) {
          String s = Arrays.toString(objects);
          System.out.println(s);
      }
      
      transaction.commit();
      

      查询多个属性,封装到对象中(需要写一个构造方法)

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select new Customer (cust_name,cust_level) from Customer c");
      List list = query.list();
      System.out.println(list);
      transaction.commit();
      
    • 分页查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("from Customer ");
      query.setFirstResult(1);
      query.setMaxResults(2);
      List list = query.list();
      System.out.println(list);
      transaction.commit();
      
    • 统计查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select count(*) from Customer ");
      Object o = query.uniqueResult(); // 调用此方法
      System.out.println(o);
      transaction.commit();
      

      分组查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Query query = session.createQuery("select cust_name,count(*) from Customer group by cust_name");
      List<Object[]> list = query.list();
      for (Object[] objects : list) {
          String s = Arrays.toString(objects);
          System.out.println(s);
      }
      transaction.commit();
      
QBC查询
  • 什么是QBC?

    Query By Criteria,条件查询,是一种更加面向对象的查询方式

    查询

    • 简单查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria criteria = session.createCriteria(Customer.class);
      List<Customer> list = criteria.list();
      System.out.println(list);
      transaction.commit();
      
    • 排序查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria criteria = session.createCriteria(Customer.class);
      criteria.addOrder(Order.desc("cust_id"));
      List<Customer> list = criteria.list();
      System.out.println(list);
      transaction.commit();
      
    • 分页查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria criteria = session.createCriteria(Customer.class);
      // 分页查询
      criteria.setFirstResult(1);
      criteria.setMaxResults(2);
      // 排序查询
      criteria.addOrder(Order.desc("cust_id"));
      List<Customer> list = criteria.list();
      System.out.println(list);
      transaction.commit();
      
    • 条件查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria criteria = session.createCriteria(Customer.class);
      // 多条件叠加
      criteria.add(Restrictions.eq("cust_name","赵六"));
      criteria.add(Restrictions.eq("cust_level","2"));
      
      List<Customer> list = criteria.list();
      System.out.println(list);
      transaction.commit();
      
    • 统计查询

      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria criteria = session.createCriteria(Customer.class);
      // 统计查询
      criteria.setProjection(Projections.rowCount());
      Object o = criteria.uniqueResult();
      System.out.println(o);
      
      transaction.commit();
      
    • 离线查询

      // 离线查询 : 先设置,用到时在查询
      // 设置条件
      DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
      detachedCriteria.add(Restrictions.eq("cust_name","田七"));
      // 查询
      Session session = HibernateUtil.getSession();
      Transaction transaction = session.beginTransaction();
      Criteria executableCriteria = detachedCriteria.getExecutableCriteria(session);
      List list = executableCriteria.list();
      System.out.println(list);
      transaction.commit();
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值