(1)一般查询应用:
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
SessionFactory factory=(SessionFactory)context.getBean("sessionFactory");
Session s = factory.openSession() ;
String hql="from User as u where u.userName like 's%'";
Query query=s.createQuery(hql);
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext())
{
User u=(User)it.next();
System.out.println(u.getRealName()+" "+u.getPassword());
}
s.close();
(2)增、删、改:
Session s = HibernateSessionFactory.getSession();
Transaction trans=null;
try{
trans=s.beginTransaction();
String hql="delete User as u where u.age>30";
Query query=s.createQuery(hql);
query.executeUpdate();
trans.commit();
trans=null;
}catch(Exception e){
e.printStackTrace();
if(trans!=null){
trans.rollback();
}
}
(3)带参数的HQL
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
SessionFactory factory=(SessionFactory)context.getBean("sessionFactory");
Session s = factory.openSession() ;
String hql="from User as u where u.userName like ?";
Query query=s.createQuery(hql);
query.setString(0, "s%");
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext())
{
User u=(User)it.next();
System.out.println(u.getRealName()+" "+u.getPassword());
}
s.close();
注:红色粗体部分可以写为:
String hql="from User as u where u.userName like :condition1";
Query query=s.createQuery(hql);
query.setString("condition1", "s%");
(4)整体来说,HQL已经非常接近SQL语句了,但有时还是需要使用SQL语句:
A)返回对象
Session s = factory.openSession() ;
String sql="select {ui.*} from tb_user ui where ui.username like 's%'";
SQLQuery sqlQuery=s.createSQLQuery(sql);
sqlQuery.addEntity("ui",User.class);
List list=sqlQuery.list();
Iterator it=list.iterator();
while(it.hasNext())
{
User u=(User)it.next();
System.out.println(u.getRealName()+" "+u.getPassword());
}
s.close();
B)返回非对象类型
Session s = factory.openSession() ;
String sql="select * from tb_user ui where ui.username like 's%'";
SQLQuery sqlQuery=s.createSQLQuery(sql);
List list=sqlQuery.list();
Iterator it=list.iterator();
while(it.hasNext())
{
Object[] u=(Object[])it.next();
System.out.println(u[1]+" "+u[2]);
}
s.close();
注意,在超过10000条数据的大型查询中,建议使用JDBC代替hibernate
本文介绍了如何利用HQL进行对象级别的查询与操作,包括基本查询、增删改操作、参数化查询以及SQL语句的使用。特别强调了在处理大数据集时,推荐使用JDBC替代Hibernate的原因。
1645

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



