• Spring中操作Hibernate的几种方式


    1、直接操作模版方式HQL:

    		//通过spring的模版方式来操作Hibernate的HQL语句
    		return this.getHibernateTemplate().find("from Customer"); 
    

    2、直接操作模版方式,对象导航查询:

    return this.getHibernateTemplate().get(Customer.class, id);
    

    3、通过获取Session来进行原始Hibernate操作HQL:

    	public List sessionSel()
    	{
    		//如果是spring管理的web程序会有当前线程绑定的session,所以一般直接获取当前线程即可
    		Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
    		//如果是JUnit测试,由于没有启动web程序所以无法绑定当前session,那么需要自己创建(仅限测试用)
    		Session session = this.getHibernateTemplate().getSessionFactory().openSession();
    		Query query = session.createQuery("from Customer");	
    		List list = query.list();
    		return list;
    	}
    

    4、通过Hibernate模版方式操作QBC(QBC是一种简化版的HQL,无需自己写SQL,但是适用场景有限,仅限于导航属性查询,无法灵活关联,了解即可,但是有一点好处就是可以跨层拼接离线查询条件来进行跨层查询条件传递)

      DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class); 
      String cust_name=customer.getCust_name();
      criteria.add(Restrictions.like("cust_name", "%"+cust_name+"%"));
    -----------------离线条件由web层创建传递到dao注入到session中(如果是spring管理,直接由模版处理了,直接调方法findByCriteria即可)
    this.getHibernateTemplate().findByCriteria(criteria);
    
    需要注意的就是,如果是统计查询,如count,sum等还需要设置方式
    criteria.setProjection(Projections.rowCount());再调用findByCriteria,其实也就是拼接条件不变,但是返回字段改成了count(*)
    
    由于查出字段可以任意指定改变,但是查询条件是传递过来的,可以重复利用,所以如果接下来还需要利用此条件进行其他字段查询,需要把先前的count(*)统计设置去掉
    criteria.setProjection(null);
    然后再调用
    this.getHibernateTemplate().findByCriteria(criteria)
    
    		 
    

      

      

      

      

  • 相关阅读:
    python类库31[正则表达式匹配实例]
    Mysql百万级数据迁移实战笔记
    面试官:一千万数据,怎么快速查询?
    为什么MySQL不建议使用NULL作为列默认值?
    Redis各个数据类型最大存储量
    Rabbitmq延迟队列实现定时任务
    PHPstorm批量修改文件换行符CRLF为LF
    使用SeasLog打造高性能日志系统
    协程编程注意事项
    Rabbitmq 安装过程中常见问题(亲测可行)
  • 原文地址:https://www.cnblogs.com/javabg/p/7349746.html
Copyright © 2020-2023  润新知