zoukankan      html  css  js  c++  java
  • 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)
    
    		 
    

      

      

      

      

  • 相关阅读:
    使用blend制作地图区域改变颜色动画效果
    使用Win32创建串口通讯程序[转]
    ArcGIS的网络分析【转】
    推荐10款非常优秀的 HTML5 开发工具[转]
    Win32串口编程(转:韩耀旭)
    软件项目版本号的命名规则及格式介绍【转】
    [ArcGIS+Win7][转]安装ArcGIS后打开"打开或关闭 Windows 功能"一片空白解决方案
    js判断客户端是否安装了activex控件[转帖]
    纪念失去的爱情(抒情诗)
    委托事件之买烟
  • 原文地址:https://www.cnblogs.com/javabg/p/7349746.html
Copyright © 2011-2022 走看看