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语句和实例对象进行的。