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)

  

  

  

  

Spring中操作Hibernate的几种方式的更多相关文章

  1. javascript总结40:DOM中操作样式的两种方式

    1 DOM中操作样式的两种方式 1 通过元素的style属性 注意: 通过style属性设置样式时,css中要写单位的属性,在js代码中也要加单位 //html <div id="bo ...

  2. Spring中属性注入的几种方式以及复杂属性的注入

    在Spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.P ...

  3. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

  4. Spring中依赖注入的四种方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...

  5. Spring中事务管理的两种方式

    spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...

  6. Spring中属性注入的几种方式以及复杂属性的注入详解

    在spring框架中,属性的注入我们有多种方式,我们可以通过set方法注入,可以通过构造方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List.Map.Prope ...

  7. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  8. Spring中配置数据源的四种方式

    1.spring自带的数据源 <bean id="dataSource" class="org.springframework.jdbc.datasource.Dr ...

  9. spring中的事务有两种方式

    1种是我们常用的声明式事务,如注解,或者配置文件配置的. 2种是编程式事务,如 TransactionTemplate 类的使用.

随机推荐

  1. WPF简介:VS创建桌面应用程序

    1.简介 1/ 什么是WPF WPF,Windows Presentation Foundation也,译过来就是"Windows呈现基础",你看它的目的非常明确,就是用来把数据& ...

  2. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  3. rest规范 ; restful 风格; gradel介绍 ; idea安装 ;

    [说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目( ...

  4. 【BZOJ3526】[Poi2014]Card 线段树

    [BZOJ3526][Poi2014]Card Description 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的 ...

  5. N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)

    N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:% ...

  6. 坑爹的 HTTPClient java.lang.NoSuchFieldError: INSTANCE

    项目中需要用到httpclient ,maven配置如下 <dependency> <groupId>org.apache.httpcomponents</groupId ...

  7. C#关于AutoResetEvent的使用介绍----修正

    说明 之前在博客园看到有位仁兄发表一篇关于AutoResetEvent介绍,看了下他写的代码,看上去没什么问题,但仔细看还是能发现问题.下图是这位仁兄代码截图. 仁兄博客地址:http://www.c ...

  8. echarts+thinkphp 学习写的第一个程序

    一.前台 建个名为map.html,代码如下. <!doctype html><html lang="en"><head> <meta c ...

  9. Pycharm中目前用到的快捷键

    1.批量注释:Ctrl+/ 2.缩进\不缩进:Tab\Shift+Tab 3.运行:Ctrl+Shift+F10 4.撤销\反撤销:Ctrl+z\Ctrl+shift+z 5.当光标在代码中间,如何回 ...

  10. 三、Nuxt项目目录结构

    使用IDE打开我们初始化完的新项目,然后发现目录如下图所示 现在来介绍一下每个目录和文件 .idea           是我使用的IDE是IDEA自动生成的,跟项目无关 .nuxt          ...