Hibernate之HQL语言查询

创建HibernateUtils类,便于直接获取session

package com.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
    private static SessionFactory sessionFactory;
    static {
        Configuration configuration = new Configuration().configure();
        //根据配置信息,创建SessionFactory对象
        sessionFactory = configuration.buildSessionFactory();
    }

    //获得session=>获得全新session
    public static Session openSession(){
        //获得session
        Session session = sessionFactory.openSession();
        return session;
    }

    //获得session=>获得与线程绑定的session
    public static Session getCurrentSession(){
        Session session = sessionFactory.getCurrentSession();
        return session;
    }




}

  

基本查询

     @Test
     public void test_01(){
         //获得session对象
         Session session = HibernateUtils.openSession();
         Transaction transaction = session.beginTransaction();
         String hql = "from Customer";
         Query query = session.createQuery(hql);
         List<Customer> list = query.list();
         System.out.println(list);
         transaction.commit();
         //transaction.rollback();
         session.close();
 
     }

  

条件查询之使用'?'占位符

@Test
     public void test_02(){
         Session session = HibernateUtils.openSession();
         Transaction transaction = session.beginTransaction();
         //-----------------------------------------
         String hql = "from Customer where cust_id = ?0";
         Query query = session.createQuery(hql);
         query.setParameter(0,3l);
         Customer cs = (Customer) query.uniqueResult();
 
         /**
          * 此处hql语句中的占位符若写成以下格式则会报错,貌似是因为Hibernate版本较高不支持
          *  String hql = "from Customer where cust_id = 0";
          *  Query query = session.createQuery(hql);
          *  query.setParameter(0,3l);
          *  Customer cs = (Customer) query.uniqueResult();
          */
 
         //-------------------------------------------
         System.out.println(cs);
         transaction.commit();
         session.close();
 
     }

  

条件查询之使用':name'占位符

@Test
     public void test_03(){
         //使用占位符 :name
         Session session = HibernateUtils.openSession();
         Transaction transaction = session.beginTransaction();
         String hql = "from Customer where cust_id = :cust_id";
         Query query = session.createQuery(hql);
         query.setParameter("cust_id",1l);
         Customer customer = (Customer) query.uniqueResult();
         System.out.println(customer);
         transaction.commit();
         session.close();
     }

  

 分页查询:

@Test
    public void test_04(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql = "from Customer";
        Query query = session.createQuery(hql);
        query.setFirstResult(0);//设置分页查询起始位置,下标从0开始
        query.setMaxResults(3);//设置一次查询多少条记录
        List<Customer> list = query.list();
        System.out.println(list);
    }

 

posted on 2019-04-03 14:43  kongieg  阅读(205)  评论(0编辑  收藏  举报