hibernate中hql语句查询

HQL语句查询

  1. HQL完全是面向对象的,可以用来过程多态、继承、关联等关系。
  2. 大小写敏感 HQL中的使用的Java的类名和属性名是大小写敏感的,其他的关键字都是大小写不敏感的。所以“SeLeCT”等同与“sELEct”,也等同于“SELECT”,因为它不是Java类名,也不是Java类的属性名

查询前我们要先了解一个函数
createQuery() 以hibernate生成的Bean为对象装入list返回
createSQLQuery() 以对象数组进行存储

1.最简单的查询

@Test
	public void fun(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		String hql="from Customer";
		//Customer类名
		Query query =  session.createQuery(hql);
		List<Customer> list = query.list();
		System.out.println(list);
		tx.commit();
		session.close();
	}

基于 ? 的参数化形式

/**
             * 查询中使用?,通过setParameter的方式可以防止sql注入
             * jdbc的setParameter的下标从1开始,hql的下标从0开始
             */
            List<Student> students = (List<Student>)session.createQuery("select stu from Student stu where name like ?")
                                                .setParameter(0, "%刘%")
                                                .list();

注意:在jdbc中,setParameter的下标是从1开始的,而hibernate的setParameter的下标是从0开始的。

如果返回的值只有一个,可以使用uniqueResult方法

@Test
	public void fun3(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		String hql2="select count(*) from Customer ";//计数		
		//Customer类名
		Query query =  session.createQuery(hql3);
		Number number = (Number) query.uniqueResult();
		System.out.println(number);
		tx.commit();
		session.close();
	}
}

基于投影的查询

/**
             * 如果对象中有导航对象,可以直接通过对象导航查询
             */
            List<Student> stus = (List<Student>)session.createQuery("select stu from Student stu where stu.room.name like :room and sex like :sex")
                                                .setParameter("room", "%计算机应用%").setParameter("sex", "%女%")
                                                .list();

条件查询

/**
             * 基于投影的查询,如果返回多个值,这些值都是保存在一个object[]数组当中
             */
            List<Object[]> stus = (List<Object[]>)session.createQuery("select stu.name, stu.sex from Student stu where name like 
                            :name and sex like :sex")
                                                .setParameter("name", "%张%").setParameter("sex", "%男%")
                                                .list();

分页查询

public void fun(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		String hql="from Customer";
		
		Query query =  session.createQuery(hql);
		query.setFirstResult(0);
		query.setMaxResults(10);
	
		
		tx.commit();
		session.close();
	}

猜你喜欢

转载自blog.csdn.net/qq_40709110/article/details/88633242