10.Spring整合Hibernate_3_HibernateTemplate

将sessionFactory 注入给 hibernateTemplate,让hibernateTemplate帮我们完成一些模板代码
1
2 <!-- 使用HibernateTemplate -->
3     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
4         <property name="sessionFactory" ref="sessionFactory"></property>
5     </bean>

HibernateTemplate的使用:

  

 1 @Component("userDAO")
 2 public class UserDAOImpl implements UserDAO{
 3     HibernateTemplate hibernateTemplate = null;
 4
 5     public HibernateTemplate getHibernateTemplate() {
 6         return hibernateTemplate;
 7     }
 8
 9     //注入HibernateTemplate
10     @Resource
11     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
12         this.hibernateTemplate = hibernateTemplate;
13     }
14
15     @Override
16     public void save(User user) {
17         //让 HibernateTemplate帮我来创建session,提交session,我只需要填 中间 最核心的( 调用 Session的 哪个方法)
18         //这体现了 一种设计模式:Template Method(模板方法)  只需要让你填最核心的内容,其他重复的东西 我帮你写
19         //具体实现过程:1.当  hibernateTemplate.save 执行后, hibernateTemplate因为有sessionFactory,所以可以帮我们完成:session的创建,事务的开启等
20         //2.之后 hibernateTemplate 会调用  HibernateCallback 把这个 session 交给  HibernateCallback的  doInHibernate方法
21         //3.在HibernateCallback的  doInHibernate 方法中,调用session的save方法
22 //即hibernateTemplate完成一些模板代码,而HibernateCallback 回调 核心代码
23         //所以   Callback:回调/钩子函数
24         hibernateTemplate.save(user);
25     }
26
27
28 }

第二种方式:
  

 1 //为所有DAOImpl创建一个父类,里面注入了HibernateTemplate,所有子类都可以直接使用父类的
 2 @Component
 3 public class SuperDAO {
 4     private HibernateTemplate hibernateTemplate;
 5
 6     public HibernateTemplate getHibernateTemplate() {
 7         return hibernateTemplate;
 8     }
 9
10     @Resource
11     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
12         this.hibernateTemplate = hibernateTemplate;
13     }
14
15 }
 1 @Component("logDAO")
 2 public class LogDAOImpl extends SuperDAO implements LogDAO{
 3
 4     //继承的父类DAO中 注入了 HibernateTemplate  所以子类中可以直接使用
 5     @Override
 6     public void saveMsg(Log log) {
 7         this.getHibernateTemplate().save(log);
 8     }
 9
10
11 }

第三种方式:
  

 1 //另外的一种解决方案
 2 //继承DaoSupport,写一个 set,将SessionFactory 注入到这个这个方法,然后,super.setSessionFactory  这样父类就有了 sessionFactory
 3 //使用Spring的 注入的 时候 ,是把bean对象注入到 set 方法的参数里面
 4
 5 @Component
 6 public class SuperDAO extends HibernateDaoSupport {
 7
 8     @Resource(name="sessionFactory")
 9     public void setSupperSessionFactory(SessionFactory sessionFactory) {
10         super.setSessionFactory(sessionFactory);
11     }
12 }
时间: 2024-11-08 21:39:52

10.Spring整合Hibernate_3_HibernateTemplate的相关文章

BOS项目 第10天(activiti工作流第二天,流程变量、组任务、排他网关、spring整合activiti、项目中实现流程定义管理)

BOS项目笔记 第10天 今天内容安排: 1.流程变量(设置.获取) 2.组任务(候选人.候选组) 3.排他网关使用 4.spring整合activiti 5.将activiti应用到bos项目中 6.在bos项目中实现流程定义管理(部署.查询.查看png.删除) 1. 流程变量 1.1 设置流程变量的方式 l 方式一:启动流程实例时设置 l 方式二:办理任务时设置 l 方式三:使用RuntimeService的set方法设置 l 方式四:使用TaskService的set方法设置 注意:如果设

Spring整合hibernate4:事务管理

Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTransaction,commit,这些都是重复的工作,我们可以把事务管理部分交给spring框架完成. 配置事务(xml方式) 使用spring管理事务后在dao中不再需要调用beginTransaction和commit,也不需要调用session.close(),使用API  sessionFactory.getCurrentSession()来

JMS 之 Active MQ 的spring整合

一.与spring整合实现ptp的同步接收消息 pom.xml: <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.3.7.RE

Spring整合jdbc

首先web.xml文件跟往常一样,加载spring容器和加载org.springframework.web.context.ContextLoaderListener读取applicationContext.xml文件初进行始化. 使用spring整合jdbc工具步骤: 1.使用连接池com.mchange.v2.c3p0.ComboPooledDataSource等工具创建数据源. 2.把数据源交给LazyConnectionDataSourceProxy进行管理 3.把LazyConnect

Spring整合JMS——基于ActiveMQ实现

1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑.对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应:另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收. 1.2  

Spring整合Quartz实现定时任务调度

一. 核心类 1. Job: 表示一个工作, 具体的业务处理都在这里. 2. JobDetail: 表示一个具体的可执行的调度程序. 3. Trigger: 用于调度参数的配置(什么时候去调用Job). 4. Scheduler: 表示一个调度容器, 容器中有一个线程池, 用来并行调度执行每个作业, 一个调度容器中可以注册多个JobDetail和Trigger. 二. 整合spring 1. 代码结构图: 2. applicationContext.xml <?xml version="1

Spring整合CXF,发布RSETful 风格WebService(转)

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF WebService不了解,具体你可以参看这两篇文章: http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html http://www.cnblogs.com/ho

Spring整合Quartz实现持久化、动态设定时间

一.spring整合 网上一搜有很多整合的方式,这里我采用了其中的一种(暂时还没有对其他的方法研究过). 对于spring的整合其中的任务,spring提供了几个类.接口(这些类都实现了Job接口): org.springframework.scheduling.quartz.QuartzJobBean org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean.MethodInvokingJob org.sp

spring整合quartz并持久化

spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例: <!-- 短信催还提醒任务调度 --> <bean id="overdueRecall" class="com.sursen.souba.ddlibserve.quartz.OverdueRecallTimerTask" /> <!--定义定时执行overdueRecallTimerTask 这个bean中的overdueRecall(