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();
-