Hibernate HQL语句使用

HQL语句概述

在这种查询语句中以java类名代替了sql语句中的表名;属性名代替表中的字段名,而且大小写敏感。

HQL被设计为完全面向对象的查询,可也理解继承,多态和关联子类的概念。

在HQL查询语句中可以使用sql聚合函数和表达式,使用语法一直,同样可以通过order by,g'roup by等子句对查询结果集进行排序和分组。

From字句

From User返回了User类中的所用实例,通常不需要使用类的全选定名。通常情况下需要指定别名,原因是在查询过程中的其他部分还会引用到User

from User user

Select子句

select cat.mate from Cat cat

选择将哪些属性返回到结果集中。

查询语句可以返回值为任何类型的属性,包括返回类型为某种组件的属性;

查询语句返回多个对象或者属性,存放在aiObject[]列表中,而且需要逐个书写列名,不能使用*号。

可以使用聚集函数有:avg、sum、min、max、count等。

Where字句

where字句允许你将返回的实例列表的范围缩小,入股哦没有制定别名,则你可以直接是哦那个属性名来引用属性。

from Cat where name=‘Frid’

指定别名:from Cat as cat where cat.name='Fritz'

from Cat as fatcat where fatcat.weight>(select avg(cat.weight) from DomesticCat cat)

在select泪飙中包括一个二标大叔以上的子查询,你可使用一个元组构造符:

from Cat as cat where (cat.name,cat.color) ont in (select cat.name,cat.color from DomesticCat cat)

先建立一个BasicDao.java的泛型接口:

public interface BasicDao<T> {
/**
 * 
 * @param t
 * @return
 */
	public boolean add(T t);

	public boolean update(T t);

	public boolean delete(Class cl,int id);
	
	public T queryById(Class cl,int id);
	
	public List<T> queryAll();
	
	public List<T> queryByLike(String str);

	public List<T> queryByPage(int page,int pagesize);

	public long  getCount();
	
}

之后建立BasicImple实现类,将每个接口方法实现,增删改查一系列方法,其中以下语句为关键代码,list为执行hql语句获取到的结果集。

Query query=session.createQuery(hql).setInteger("age",age);

List result=query.list();

在实现方法中想要实现其泛用性,需要在方法中将hql语句当作参数传入。

在接下来书写的方法中我们为了简便使用Person对象。

	public List<T> queryAll() {//查询所有数据
		
		String hql="from Person";
		
		Session session=HibernateUtil.getSession();
		Transaction tran=session.beginTransaction();
		Query query=session.createQuery(hql);
		List<T> list=query.list();
		tran.commit();
		return (List<T>) list;     
	}

Test.java:

BasicImpl<Person> personDao =new BasicImpl<Person>();
	 
	 		List<Person> list=personDao.queryAll();
	 		
	 		for(Person person:list)
	 		{
	 			System.out.println(person.getPname());
	 		
	 		}

hql语句中可以正常使用字符串拼接,但是setString时字符串从0开始进行拼接。

String hql="from Person  where pname like ?";
		Session session=HibernateUtil.getSession();
		Transaction tran=session.beginTransaction();
		Query query=session.createQuery(hql);
		query.setString(0,"%+str+%")
		List<T> list=query.list();
		tran.commit();
		return (List<T>) list;    

模糊查询方法:

public List<T> queryByLike(String str) {
		String hql="from Person  where pname like ?";	
		Session session=HibernateUtil.getSession();
		Transaction tran=session.beginTransaction();
		Query query=session.createQuery(hql);
		query.setString(0,"%"+str+"%");
		List<T> list=query.list();
		tran.commit();
		return (List<T>) list;    
	}

这时我们的增删改查方法大致成型,真正做项目的时候需要用到的更多的方法,需要在继承接口的同时进行拓展。

HQL语句大致和sql的写法上面差异不大,所有的操作通过泛型接口中的泛型对象方法,通过传递HQL语句和实例对象进行的。

猜你喜欢

转载自blog.csdn.net/YuQuanZhang/article/details/81288142
今日推荐