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)
Spring中操作Hibernate的几种方式的更多相关文章
- javascript总结40:DOM中操作样式的两种方式
1 DOM中操作样式的两种方式 1 通过元素的style属性 注意: 通过style属性设置样式时,css中要写单位的属性,在js代码中也要加单位 //html <div id="bo ...
- Spring中属性注入的几种方式以及复杂属性的注入
在Spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.P ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- Spring中事务管理的两种方式
spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...
- Spring中属性注入的几种方式以及复杂属性的注入详解
在spring框架中,属性的注入我们有多种方式,我们可以通过set方法注入,可以通过构造方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List.Map.Prope ...
- Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...
- Spring中配置数据源的四种方式
1.spring自带的数据源 <bean id="dataSource" class="org.springframework.jdbc.datasource.Dr ...
- spring中的事务有两种方式
1种是我们常用的声明式事务,如注解,或者配置文件配置的. 2种是编程式事务,如 TransactionTemplate 类的使用.
随机推荐
- 读取文件之<绝对路径>与<相对路径>
前言:字符流.字节流读取文件,下面的代码是在网上找到的一个各种文件读取方式,还算比较详细,分享给大家. public class ReadFromFile { /** * 以字节为单位读取文件,常用于 ...
- java访问权限修饰符,一张图搞清楚
可横向,纵向进行比较记忆
- linux终端常用命令
常用的信息显示命令 命令#pwd 用于在屏幕上输出当前的工作目录. 命令#stat 用于显示指定文件的相关信息. 命令#uname -a 用于显示操作系统信息. 命令#hostname 用于显示当前本 ...
- 复制对象(一)copy和mutableCopy方法
本文转载至 http://www.tuicool.com/articles/Fn6rMn CSDN博客原文 http://blog.csdn.net/u010962810/article/detai ...
- java中通过配置文件的方式(Jedis驱动)使用Redis
在java中使用Redis,实际上是将Redis的一些命令封装到Jedis的实体类中,然后进行调用.
- Native VLAN打上标记
802.1Q和ISL都知道两者的区别在于前者对native vlan的流量不打标记,而后者统一都打标记. 配置成Native VLAN的Trunk端口,收到Native VLAN的帧后,不打标记直接从 ...
- 【BZOJ2282】[Sdoi2011]消防 树形DP+双指针法+单调队列
[BZOJ2282][Sdoi2011]消防 Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这 ...
- Happy Necklace(矩阵快速幂)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...
- 在执行save操作时候出现的诡异!
情景:有一份excel数据需要导入到数据库中,想了想就写了一个导入excel的小功能. .............................准备使用时候,就开搞了,擦! 什么鬼??? 全程无报错 ...
- js split 的用法和定义 js split分割字符串成数组的实例代码
关于js split的用法,我们经常用来将字符串分割为数组方便后续操作,今天写一段广告判断代码的时候,竟然忘了split的用法了,特整理下,方便需要的朋友, 关于js split的用法其它也不多说什么 ...