Hibernate query a variety of ways - HQL and QBC

A, OID query

OID query retrieval means according to the object OID primary key

OID query:

  • get (): SQL statement issued immediately returns the actual object, not query returns null
  • load (): Returns the target object of a proxy object that only stores the ID value of the target object, issue SQL statements when only call other properties, can not find error

Second, the object navigation search

Object means the navigation search is already a query object to obtain its associated objects

三、HQL(Hibernate Query Language)

hibernate query language similar to SQL, but the object-oriented. Using session.creatQuery (), note that the wording does not support *

1. Simple Query

```
Query query = session.createQuery("from User");
List<User> list = query.list();
```

2. Alias ​​inquiry

```
Query query = session.createQuery("select c from User c");
List<User> list = query.list();
```

3. Sort inquiry

```
Query query = session.createQuery("select c from User c order by user_id desc");
List<User> list = query.list();
```

4. Conditions inquiry

  • Location binding, similar to JDBC is not used now
  • Name Binding
    Query query = session.createQuery("from User where user_code=:aaa and user_name=:bbb");
    query.setParameter("aaa","11");
    query.setParameter("bbb","user1");
    List<User> list = query.list();
    

5. projection inquiry

  • A single property
    List<Object> list = session.createQuery("select c.user_name from User c").list();
    System.out.println(list);
    
  • More properties
    List<Object[]> list = session.createQuery("select c.user_name,c.user_code from User c").list();
    for (Object[] objects : list) {
        System.out.println(Arrays.toString(objects));
    }
    
  • A plurality of attributes, the encapsulated object with the builder
    List list = session.createQuery("select new User(user_code,user_name) from User").list();
    System.out.println(list);
    

6. paging query

```
Query query = session.createQuery("from User");
// 位置从 0 开始数,包含 0
query.setFirstResult(0);
query.setMaxResults(2);
List list = query.list();
System.out.println(list);
```

7. statistical inquiry

  • statistics
    Object o = session.createQuery("select count(*) from User").uniqueResult();
    System.out.println(o);
    
  • Packet
    List<Object[]> list = session.createQuery("select user_code,count(*) from User group by user_code").list();
    for (Object[] objects : list) {
        System.out.println(Arrays.toString(objects));
    }
    

8. The multi-table query

  • En: foreign key equal portions taken out
  • Left Connection: All tables left, only the right to check the foreign key equal parts
  • Right connection: the right side of the table all of the left outer table only search key equal parts
  • En general
    List<Object[]> list = session.createQuery("from User c inner join c.roles").list();
    for (Object[] objects : list) {
        System.out.println(Arrays.toString(objects));
    }
    
  • En urgent
    List<User> list = session.createQuery("from User c inner join fetch c.roles").list();
    for (User user : list) {
        System.out.println(user);
    }
    

四、QBC(Query By Criteria)

QBC is mainly used in the query conditions, more object-oriented

1. Simple Query

```
List<User> list = session.createCriteria(User.class).list();
for (User user : list) {
    System.out.println(user);
}
```

2. Sorting Query

```
// 添加排序
criteria.addOrder(Order.asc("user_id"));
```

3. paging query

```
// 添加分页
criteria.setFirstResult(0);
criteria.setMaxResults(2);
```

4. Conditions inquiry

  • condition

    = eq
    > gt
    >= ge
    < lt
    <= le
    <> ne
    like
    in
    and
    or

  • A single condition
    criteria.add(Restrictions.eq("user_name","user1"));
    
  • Multiple criteria
    criteria.add(Restrictions.eq("user_name","user1"));
    criteria.like(Restrictions.eq("user_code","1%"));
    
  • D
    Criteria criteria = session.createCriteria(User.class);
    // setProjection 设置一些聚合函数
    Object o = criteria.setProjection(Projections.rowCount()).uniqueResult();
    System.out.println(o);
    
  • Offline conditions of inquiry, from the Session, add a condition, you can use the object submitted DetachedCriteria set conditions in advance on the outside, and finally bound to the session which
    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
    // 设置条件
    detachedCriteria.add(Restrictions.eq("user_name","user1"));
    // 打开 session
    Session session = HibernateUtil.openSession();
    Criteria executableCriteria = detachedCriteria.getExecutableCriteria(session);
    List list = executableCriteria.list();
    System.out.println(list);
    

Guess you like

Origin www.cnblogs.com/mdz3201/p/HQL_QBC.html