SHH框架构造四--HQL

本文介绍了如何利用HQL进行对象级别的查询与操作,包括基本查询、增删改操作、参数化查询以及SQL语句的使用。特别强调了在处理大数据集时,推荐使用JDBC替代Hibernate的原因。

(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值