hibernate与spring整合实现transaction

实现transaction时出现了大大小小的问题,这里会一一详解。

先贴出applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <context:annotation-config />
    <context:component-scan base-package="com.bjsxt"/>
    <!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> -->
    <!-- <bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean>
    <aop:config>

        <aop:aspect id="logAspect" ref="logInterceptor">
            <aop:before method="before" pointcut="execution(public * com.bjsxt.service..*.add(..))" />
            <aop:after method="after" pointcut="execution(public * com.bjsxt.service..*.add(..))"/>
        </aop:aspect>

    </aop:config> -->
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:jdbc.properties</value>
        </property>
    </bean>

    <bean id="dataSource" destroy-method="close"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName"
            value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.bjsxt.model.User</value>
                 <value>com.bjsxt.model.Logs</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
     <!-- enable the configuration of transactional behavior based on annotations -->
     <tx:annotation-driven transaction-manager="txManager"/>
   <bean id="txManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
  </bean>
</beans>

这里注意,一定要加上

xmlns:tx="http://www.springframework.org/schema/tx"
  http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

否则会报找不到annotation-driven的错误

贴出service

package com.bjsxt.service;
import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.bjsxt.dao.LogsDAO;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.Logs;
import com.bjsxt.model.User;
@Component("userService")
public class UserService {
    private UserDAO userDAO;
    private LogsDAO logsDAO;
    public LogsDAO getLogsDAO() {
        return logsDAO;
    }
    @Resource(name="thelogs")
    public void setLogsDAO(LogsDAO logsDAO) {
        this.logsDAO = logsDAO;
    }

    public void init() {
        System.out.println("init");
    }
    @Transactional
    public void add(User user) {
        userDAO.save(user);
        Logs thelogs=new Logs();
        thelogs.setMsg("add a user");
        logsDAO.sava(thelogs);
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
    @Resource(name="u")
    public void setUserDAO( UserDAO userDAO) {
        this.userDAO = userDAO;
    }
    public void destroy() {
        System.out.println("destroy");
    }
}

贴出LogsDAOImpl和UserDAOImpl其中的LogsDAOImpl

package com.bjsxt.dao.impl;
import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;

import com.bjsxt.dao.LogsDAO;
import com.bjsxt.model.Logs;
@Component("thelogs")
public class LogsDAOImpl implements LogsDAO {
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    @Resource
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public void sava(Logs logs) {
        // TODO Auto-generated method stub
        Session s=sessionFactory.getCurrentSession();
        s.save(logs);
    }

}

测试类

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService)ctx.getBean("userService");
        System.out.println(service.getClass());
        service.add(new User("22","22"));
        ctx.destroy();

执行结果

class com.bjsxt.service.UserService$$EnhancerByCGLIB$$6dcce04e
session factory class:class org.hibernate.internal.SessionFactoryImpl
Hibernate: insert into User (password, username) values (?, ?)
user saved!
Hibernate: insert into Logs (msg) values (?)

注意的是本次使用的是spring3.1.1和hibernate4.0

如果使用的是hibernate4.3以上的话会报org.hibernate.engine.spi.sessionFactoryImplementor.getConnectinoProvider()这个类找不到。是版本的问题

时间: 2024-10-13 16:15:35

hibernate与spring整合实现transaction的相关文章

Hibernate 与Spring整合出现 hibernate.HibernateException: createCriteria is not valid without active transaction

当 Hibernate 和 Spring 整合时,在 Spring 中指定的 Hibernate.cfg.xml 文件内容中要注释掉以下内容: <!-- Enable Hibernate's automatic session context management --> <!-- <property name="current_session_context_class">thread</property> -->这样,才能将 Hibe

Hibernate与spring整合时的整合步骤

Hibernate与Spring整合步骤: 第一步:加入Hibernate和Spring的相关jar包 第二步:创建application.xml文件,配置dataSource和session, 第三步:将sessionFactory对象注入到Dao实现类中,并操作数据库 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/

ssh整合之三hibernate和spring整合

1.拷贝我们的spring事务控制所需的jar包 2.在spring容器中配置我们的hibernateTemplate以及事务管理器 <?xml version="1.0" encoding="UTF-8"?> <!-- spring的配置文件:导入约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt

struts2,hibernate,spring整合笔记(2)

上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置hibernate时用的javase, 在window-> preferences->java->user libraries,创建一个新的Use libraries,添加相应的jar包 再在项目build path->build configurationpath->add l

struts2,hibernate,spring整合笔记(3)

struts2,hibernate,spring整合笔记(1) struts2,hibernate,spring整合笔记(2) 配好struts和hibernate就要开始spring了 老规矩,还是先导入jar包 spring.jar aspectjrt.jar aspectjwerver.jar cglib-nodep-2.1_3.jar common-logging.jar c3p0-0.9.1.jar 之后加入配置文件src目录下applicationContext.xml <?xml

Hibernate与Spring整合的一些配置问题(一)——LocalSessionFactoryBean

前言 新手在学到Hibernate和Spring整合的时候,如果没有良好的教程例子,很容易不知所措,这时候就会本能地去网络上寻找相关的例子.但是,网络上的案例层次不一,有的非常老旧,有的框架又整合了很多,少有切合自身发展阶段的例子,让人看得头大.这里我,简单地介绍下LocalSessionFactoryBean及Hibernate Dao层开发的一些内容.希望能给予需要的人一些帮助. 正文 网上的一些案例在Spring配置文件中用到了LocalSessionFactoryBean.也有人可能没注

Hibernate和spring整合

个人运行环境: hibernate:4.3.5 spring-context:4.0.6 <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId

struts2,hibernate,spring整合笔记(4)--struts与spring的整合

饭要一口一口吃,程序也要一步一步写, 很多看起来很复杂的东西最初都是很简单的 下面要整合struts和spring spring就是我们的管家,原来我们费事费神的问题统统扔给她就好了 先写一个测试方法 package com.hibernate; import static org.junit.Assert.*; import org.hibernate.SessionFactory; import org.junit.Test; import org.springframework.conte

框架整合----------Hibernate、spring整合

说到整合框架,其实也就是环境的搭建了,首先我们要导包,这里连接数据库我们用到了spring容器,我们用连接池来进行数据库的连接,我们需要导入c3p0和jdbc的jar包,其余的就是spring和Hibernate的jar包 之后我们在src下新建一系列的包和类,dao层我们新建一个接口,在建一个接口的实现类,同样service层也是新建一个接口和实现类,再写一个测试的main方法,当然实体类肯定不能少 接下来新建一个spring的xml(app.xml),在这个xml中我们获得sessionfa