HQL是面向对象的查询语言,它和SQL查询语言有些相似,但它使用的是类、对象和属性的概念,而没有表和字段的概念。在Hibernate提供的各种检索方式中,HQL是官方推荐的查询语言,也是使用最广泛的一种检索方式。本文将对HQL几种常用的方式进行讲解。
指定别名
@Test
public void aliasTest(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "from Person as p where p.name ='shi'";
Query query = session.createQuery(hql);
List<Person> ps=query.list();
for (Person person : ps) {
System.out.println(person.toString());
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
} 投影查询
@Test
public void portionQueryTest(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "select p.name,p.sex from Person as p";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
Iterator it = list.iterator();
while(it.hasNext())
{
Object[] obj = (Object[]) it.next();
System.out.println(obj[0]+" "+obj[1]);
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
} 动态实例查询
@Test
public void dynamicQueryTest(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "select new Person(p.name,p.sex)from Person as p";
Query query = session.createQuery(hql);
@SuppressWarnings("deprecation")
Object count=query.uniqueResult();
List<Person> list=query.list();
for (Person p : list) {
System.out.println(p.getName()+" "+p.getSex());
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
} 条件查询(按参数位置查询)
@Test
public void paraQueryTest1(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "from Person where name like ?";
Query query = session.createQuery(hql);
query.setString(0, "%er%");
List<Person> list=query.list();
for (Person p : list) {
System.out.println(p.toString());
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
条件查询(按参数名字查询)
@Test
public void paraQueryTest2(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "from Person where id=:id";
Query query = session.createQuery(hql);
query.setParameter("id",4);
List<Person> list=query.list();
for (Person p : list) {
System.out.println(p.toString());
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
} 分页查询
@Test
public void paraPageTest2(){
// TODO Auto-generated method stub
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf = HibernateUtil.getSessionFactory();
session = sf.getCurrentSession();
ts = session.beginTransaction();
String hql = "from Person";
Query query = session.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(2);
List<Person> list=query.list();
for (Person p : list) {
System.out.println(p.toString());
}
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(ts != null)
{
ts.rollback();
}
e.printStackTrace();
}
}
HQL作为面向对象的查询语言,是Hibernate推荐的查询方式。本文深入探讨了HQL的使用,包括别名指定、投影查询、动态实例查询、条件查询(按位置和名字)以及分页查询等核心概念。
322

被折叠的 条评论
为什么被折叠?



