天天看點

Hibernate 學習筆記 之 查詢方式

一、對象導航查詢

根據id查詢某個客戶,再查詢這個客戶裡面所有的聯系人
//示範對象導航查詢
    @Test
    public void testSelect1() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            /**
             * 根據cid = 1客戶,再查詢這個客戶裡面所有聯系人
             */
            Customer customer = session.get(Customer.class, 1);

            Set<LinkMan> linkMans = customer.getSetLinkMan();

            System.out.println(linkMans.size());

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      

二、OID查詢

根據id查詢某一條記錄,傳回對象
  即調用session裡面的get方法實作
get(Customer.class, 1);      

三、hql查詢

用Query對象,寫hql語句來實作查詢
①hql:(hibernate query language,提供一種查詢語言,hql語言和普通sql相似。差別在于:普通sql操作資料庫表和字段,hql操作實體類和屬性)
②常用hql語句
③使用hql查詢操作時候,使用Query對象
  (1)建立Query對象,寫hql語句
  (2)調用Query對象裡面的方法得到結果
Hibernate5.x Query 對象(不提示過時)

以下還是使用老版本

/**
     * 查詢所有
     */
    public void testSelect2() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1.建立query對象
            Query query = session.createQuery("from Customer");

            //2.調用方法得到結果
            List<Customer> list = query.list();

            for (Customer customer : list){
                System.out.println(customer.getCid() + "::" + customer.getCustName());
            }

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 條件查詢
     * from xxx where xx=? and x=?
     * from yyy where yy like?
     */
    @Test
    public void testSelect3() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            //select * from t_customer where cid=? and custName=?
            Query query =
                    session.createQuery("from Customer where cid=? and custName=?");
            /**
             * 2.設定條件值 即 向?中設定
             * 第一個參數:int類型 ---> 标号 從 0開始
             * 第二個參數:具體參數值
             */
            query.setParameter(0, 1);
            query.setParameter(1, "啦啦");

            //3.調用方法得到結果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 模糊查詢 like
     */
    @Test
    public void testSelect4() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            //select * from t_customer where cid=? and custName=?
            Query query =
                    session.createQuery("from Customer where custName like ?");

            //2 設定?的值
            //啦%
            query.setParameter(0, "啦%");

            //3.調用方法得到結果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 排序查詢
     */
    @Test
    public void testSelect5() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Query query =
                    session.createQuery("from Customer order by id");

            //3.調用方法得到結果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 分頁查詢
     * mysql裡 使用關鍵字 limit
     * select * from t_customer limit 0, 3;
     *
     * 在hql操作中,在語句裡面不能寫limit query有兩個方法可用
     */

    @Test
    public void testSelect6() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Query query = session.createQuery("from Customer");

            //2.設定分頁資料
            //2.1設定開始位置
            query.setFirstResult(0);
            //2.2設定每頁記錄數
            query.setMaxResults(3);

            //3.調用方法得到結果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 投影查詢
     *
     * 可以查詢部分字段
     *
     * select 實體類屬性名稱1,實體類屬性名稱2 from 實體類名稱
     * select 後面不能寫 * , 不支援的
     */
    @Test
    public void testSelect7() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Query query = session.createQuery("select custName from Customer");

            //2.調用方法得到結果
            List<Customer> list = query.list();
            for (Object object : list){
                System.out.println(object);
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 聚集函數使用
     *
     * 常用聚集函數:
     *      count sum avg max min
     */
    @Test
    public void testSelect8() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Query query = session.createQuery("select count(*) from Customer");

            //調用方法得到結果
            //query對象裡面有方法,直接傳回對象形式
            Object object = query.uniqueResult();

            Long lobj = (Long) object;
            int count = lobj.intValue();
            System.out.println(count);



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      

四、QBC查詢

Criteria對象
/**
     * 使用QBC時候,
     * 不需要寫語句,使用方法實作
     *
     * 操作實體類和屬性
     */      
/**
     * 查詢所有
     */
    @Test
    public void testSelect9() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //調用方法得到結果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 條件查詢
     *
     */
    @Test
    public void testSelect10() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 使用Criteria對象裡面的方法設定條件值
            //首先使用add方法,表示設定條件
            //在add方法裡面使用類的方法實作條件設定
            criteria.add(Restrictions.eq("custName", "啦啦"));

            //3. 調用方法得到結果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      

Restrictions的方法表

/**
     * 模糊查詢
     *
     */
    @Test
    public void testSelect11() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 使用Criteria對象裡面的方法設定條件值
            //首先使用add方法,表示設定條件
            //在add方法裡面使用類的方法實作條件設定
            criteria.add(Restrictions.like("custName", "%啦"));

            //3. 調用方法得到結果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 排序查詢
     *
     */
    @Test
    public void testSelect12() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 設定排序規則和對哪個屬性進行排序
            criteria.addOrder(Order.asc("cid"));

            //3. 調用方法得到結果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 分頁查詢
     *
     */
    @Test
    public void testSelect13() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 設定分頁資料
            //2.1 設定開始位置
            criteria.setFirstResult(0);

            //2.2每頁顯示記錄數
            criteria.setMaxResults(3);

            //3. 調用方法得到結果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      
/**
     * 統計查詢
     *
     */
    @Test
    public void testSelect15() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 建立query對象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 設定操作
            criteria.setProjection(Projections.rowCount());

            //3. 調用方法得到結果
            Object object =  criteria.uniqueResult();
            Long lobj = (Long) object;
            int count = lobj.intValue();
            System.out.println(count);

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally      

五、本地sql查詢

SQLQuery對象,使用普通sql實作查詢

繼續閱讀