Hibernate框架之检索查询(五种查询方法详解)

1、HQL

单表检索

public class HQLFunction {
    //投影检索
    @Test
    public void fun6(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql1 = " select cust_name from  com.itheima.domain.Customer ";
        String hql2 = " select cust_name,cust_id from  com.itheima.domain.Customer ";
        String hql3 = " select new Customer(cust_id,cust_name) from  com.itheima.domain.Customer ";

        Query query = session.createQuery(hql1);
        List list = query.list();
        System.out.println(list);

        transaction.commit();
        HibernateUtils.close(session);
    }

    //统计检索
    @Test
    public void fun5(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql1 = " select count(*) from com.itheima.domain.Customer ";//完整写法

        Query query = session.createQuery(hql1);
        Number number = (Number) query.uniqueResult();
        System.out.println(number);

        transaction.commit();
        HibernateUtils.close(session);
    }

    //分页检索
    @Test
    public void fun4(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql = " from  com.itheima.domain.Customer";//完整写法

        Query query = session.createQuery(hql);
        query.setFirstResult(0);
        query.setMaxResults(3);
        List list = query.list();
        System.out.println(list);

        transaction.commit();
        HibernateUtils.close(session);
    }

    //条件检索
    @Test
    public void fun3(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql1 = " from  com.itheima.domain.Customer where cust_id=? ";//完整写法
        String hql2 = " from  com.itheima.domain.Customer where cust_id=:id ";//完整写法

        Query query = session.createQuery(hql2);
        query.setParameter("id",1l);
        Object object = query.uniqueResult();
        System.out.println(object);

        transaction.commit();
        HibernateUtils.close(session);
    }

    //排序检索
    @Test
    public void fun2(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql1 = " from  com.itheima.domain.Customer order by cust_id asc ";//完整写法
        String hql2 = " from  com.itheima.domain.Customer order by cust_id desc ";//完整写法

        Query query = session.createQuery(hql2);
        List<Customer> list = query.list();
        for(Customer customer : list){
            System.out.println(customer);
        }

        transaction.commit();
        HibernateUtils.close(session);
    }

    //基本检索
    @Test
    public void fun1(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql1 = "from com.itheima.domain.Customer";//完整写法
        String hql2 = "from Customer";//简写
        String hql3 = "from kava.long.Object";//根据类型查,当前映射文件中注册的所有Object的子类对象

        Query query = session.createQuery(hql1);
        List<Customer> list = query.list();
        for(Customer customer : list){
            System.out.println(customer);
        }

        transaction.commit();
        HibernateUtils.close(session);
    }
}

多表检索

public class HQLMTMFunctiom {
    /*
    复习原生SQL:
      交叉连接-笛卡尔积(避免)
            select * from A,B
      内连接
        |-隐式内连接
            select * from A,B  where b.aid = a.id
        |-显式内连接
            select * from A inner join B on b.aid = a.id
       外连接
        |- 左外
            select * from A left [outer] join B on b.aid = a.id
        |- 右外
            select * from A right [outer] join B on b.aid = a.id
     */

    //HQL 右外连接 => 将连接的两端对象分别返回.放到数组中.
    @Test
    public void fun4(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql = "from Customer c right join c.linkmanSet";
        Query query = session.createQuery(hql);
        List<Object[]> list = query.list();
        for(Object[] objects : list){
            System.out.println(Arrays.toString(objects));
        }

        transaction.commit();
        HibernateUtils.close(session);
    }

    //HQL 左外连接 => 将连接的两端对象分别返回.放到数组中.
    @Test
    public void fun3(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql = "from Customer c left join c.linkmanSet";
        Query query = session.createQuery(hql);
        List<Object[]> list = query.list();
        for(Object[] objects : list){
            System.out.println(Arrays.toString(objects));
        }

        transaction.commit();
        HibernateUtils.close(session);
    }

    //HQL 迫切内连接 => 帮我们进行封装.返回值就是一个对象
    @Test
    public void fun2(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql = "from Customer c inner join fetch c.linkmanSet";
        Query query = session.createQuery(hql);
        List<Customer> list = query.list();
        for(Customer customer : list){
            System.out.println(customer);
        }

        transaction.commit();
        HibernateUtils.close(session);
    }

    //HQL 内连接 => 将连接的两端对象分别返回.放到数组中.
    @Test
    public void fun1(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        String hql = "from Customer c inner join c.linkmanSet";
        Query query = session.createQuery(hql);
        List<Object[]> list = query.list();
        for(Object[] object : list){
            System.out.println(Arrays.toString(object));
        }

        transaction.commit();
        HibernateUtils.close(session);
    }
}

2、Criteria(BQC)

public class Demo {
	
	@Test
	//基本语法
	public void fun1(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = session.createCriteria(Customer.class);
		List<Customer> list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
	    session.close();
	}
	
	@Test
	//条件语法
	public void fun2(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = session.createCriteria(Customer.class);
//		c.add(Restrictions.idEq(2l));
		c.add(Restrictions.eq("cust_id",2l));
		List<Customer> list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
		session.close();
	}
	
	@Test
	//分页语法 - 与HQL一样
	public void fun3(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = session.createCriteria(Customer.class);
		//limit ?,? 
		c.setFirstResult(0);
		c.setMaxResults(2);
		List<Customer> list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
		session.close();
	}
	
	@Test
	//排序语法 
	public void fun4(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = session.createCriteria(Customer.class);
		c.addOrder(Order.asc("cust_id"));
		//c.addOrder(Order.desc("cust_id"));
		List<Customer> list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
		session.close();
	}
	
	@Test
	//统计语法 
	public void fun5(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = session.createCriteria(Customer.class);
		//设置查询目标
		c.setProjection(Projections.rowCount());
		List list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
		session.close();
		
	}
}
public class Demo2 {

        //离线检索
	@Test
	public void fun1(){
		//Service/web层
		DetachedCriteria dc  = DetachedCriteria.forClass(Customer.class);
		dc.add(Restrictions.idEq(6l));//拼装条件(全部与普通Criteria一致)
		//----------------------------------------------------
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//----------------------------------------------------
		Criteria c = dc.getExecutableCriteria(session);
		List list = c.list();
		System.out.println(list);
		//----------------------------------------------------
		tx.commit();
		session.close();
	}
}

3、OID

4、对象导航

5、原生SQL

猜你喜欢

转载自blog.csdn.net/aiyowei1106/article/details/81543075
今日推荐