`
leiwuluan
  • 浏览: 705169 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

在Spring应用中使用Hibernate

阅读更多
<1>Spring in Hibernate示例

<1 Spring配置文件

 

    <bean id="dataSource"

          class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

        <property name="url">

            <value>jdbc:mysql://localhost:3306/test</value>

        </property>

        <property name="username">

            <value>root</value>

        </property>

        <property name="password">

            <value>root</value>

        </property> 

</bean>

 

    <bean id="sessionFactory" 

          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"

          destroy-method="close">

        <property name="dataSource">

            <ref bean="dataSource"/>

        </property>

        <property name="mappingResources">

            <list>

                <value>com/pojo/User.hbm.xml</value>

            </list>

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.MySQLDialect

                </prop>

            </props>

        </property>

</bean>

 

 

    <bean id="userDAO" class="com.dao.UserDAO">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

 

2> Hibernate映射文件

<hibernate-mapping>

    <class name="com.pojo.User" table="user">

        <id name="id" column="id">

            <generator class="native"/>

        </id>

        <property name="name" column="name"/>

        <property name="age" column="age"/>

    </class>

</hibernate-mapping>

 

3> User

public class User {

    private Integer id;

    private String name;

private Integer age;

//get set method…

}

 

 

4> IUserDAO接口

public interface IUserDAO {

    public void insert(User user);

    public User find(Integer id);

}

 

5> UserDAO实现类

public class UserDAO implements IUserDAO {

 

private SessionFactory sessionFactory;

 

public UserDAO() {}

 

    public UserDAO(SessionFactory sessionFactory) {

        this.setSessionFactory(sessionFactory);

}

 

    public void setSessionFactory(SessionFactory sessionFactory) {

        this.sessionFactory = sessionFactory;

}

 

    public void insert(User user) {

        Session session = sessionFactory.openSession();

        Transaction tx= session.beginTransaction();

        session.save(user);

        tx.commit();

        session.close();

    }

 

    public User find(Integer id) {

        Session session = sessionFactory.openSession();

        User user = (User) session.get(User.class, id);

        session.close();

        return user;

    }

}

 

6> Test测试类

public class Test{

    public static void main(String[] args) {

        ApplicationContext context = new FileSystemXmlApplicationContext(

                    "beans-config.xml");

        IUserDAO userDAO = (IUserDAO) context.getBean("userDAO");

       

        User user = new User();

        user.setName("caterpillar");

        user.setAge(new Integer(30));

       

        userDAO.insert(user);

       

        user = userDAO.find(new Integer(1));

       

        System.out.println("name: " + user.getName());

    }

}

 

 

<2>HibernateTemplate类与HibernateDaoSupport

借助HibernateTemplate我们可以脱离每次数据操作必须首先获得Session实例、启动事务、提交/回滚事务以及烦杂的try/catch/finally的繁琐操作。从而获得以上代码中精干集中的逻辑呈现效果。

HibernateSupport实现了HibernateTemplateSessionFactory实例的关联。

 

使用示例部分代码:

public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {

  public List getUsers() {

         return getHibernateTemplate().find("from User");

  }

  

  public User getUser(Integer id) {

         return (User) getHibernateTemplate().get(User.class,id);

  }

  

  public void saveUser(User user) {

         getHibernateTemplate().saveOrUpdate(user);

  }

  

  public void removeUser(Integer id) {

         Object user=getHibernateTemplate().load(User.class,id);

         getHibernateTemplate().delete(user);

  }

}

 

 

12.事务管理

对于J2EE 应用程序而言,事务的处理一般有两种模式:

 

1 依赖特定事务资源的事务处理

这是应用开发中最常见的模式,即通过特定资源提供的事务机制进行事务管理。如通过JDBCJTA rollbackcommit方法;Hibernate Transaction rollbackcommit方法等。这种方法大家已经相当熟悉。

 

2 依赖容器的参数化事务管理

通过容器提供的集约式参数化事务机制,实现事务的外部管理。

 

Spring提供了一致的事务管理抽象。这个抽象是Spring最重要的抽象之一, 它有如下的优点:

 

(1)为不同的事务API提供一致的编程模型,如JTAJDBCHibernateiBATIS数据库层 JDO

(2)提供比大多数事务API更简单的,易于使用的编程式事务管理API

(3)整合Spring数据访问抽象

(4)支持Spring声明式事务管理

 

Spring事务管理能给我们带来什么?

对于传统的基于特定事务资源的事务处理而言(如基于JDBC 的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。

 

对于依赖容器的参数化事务管理而言,Spring 则表现出了极大的价值。Spring本身也是一个容器,只是相对EJB容器而言,Spring显得更为轻便小巧。我们无需付出其他方面的代价,即可通过Spring实现基于容器的事务管理(本质上来讲,Spring的事务管理是基于动态AOP)。

(1)编程式事务管理

使用TransactionTemplate

TransactionTemplate采用和其他Spring模板 ,如 HibernateTemplate一样的方法。它使用回调方法,把应用 程序代码从处理取得和释放资源中解脱出来(不再有try/catch/finally)。如同 其他模板,TransactionTemplate是线程安全的。

 

示例:

 

UserDAO实现类

public class UserDAO implements IUserDAO {

    private TransactionTemplate transactionTemplate;

    private HibernateTemplate hibernateTemplate;

 

    public void setSessionFactory(

            SessionFactory sessionFactory) {

        this.transactionTemplate =

            new TransactionTemplate(

                    new HibernateTransactionManager(

                            sessionFactory)); 

        this.hibernateTemplate =

            new HibernateTemplate(sessionFactory);

    }

   

    public void insert(User user) {

        final User userData = user;

       

        transactionTemplate.setPropagationBehavior(

                TransactionDefinition.PROPAGATION_REQUIRED);

       

        transactionTemplate.execute(

          new TransactionCallbackWithoutResult() {

                protected void doInTransactionWithoutResult(

                        TransactionStatus status) {

                    try {

                        hibernateTemplate.save(userData);

                    }

                    catch(DataAccessException e) {

                        e.printStackTrace();

                        status.setRollbackOnly();

                    }

                }

            });

    }

 

    public User find(Integer id) {

        User user =

            (User) hibernateTemplate.get(User.class, id);

       

        return user;

    }

}

 

Test测试类

public class Test{

    public static void main(String[] args) {

        ApplicationContext context = new FileSystemXmlApplicationContext(

                    "beans-config.xml");

       

        IUserDAO userDAO =

            (IUserDAO) context.getBean("userDAO");

       

        User user = new User();

        user.setName("caterpillar");

        user.setAge(new Integer(30));

       

        userDAO.insert(user);

       

        user = userDAO.find(new Integer(1));

       

        System.out.println("name: " + user.getName());

    }

}

 

(2)声明式事务管理

Spring也提供了声明式事务管理。这是通过Spring AOP实现的。

 

大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。

 

示例:

 

Spring配置文件

    <bean id="dataSource"

          class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

        <property name="url">

            <value>jdbc:mysql://localhost:3306/test</value>

        </property>

        <property name="username">

            <value>root</value>

        </property>

        <property name="password">

            <value>root</value>

        </property> 

    </bean>

   

    <bean id="sessionFactory" 

          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"

          destroy-method="close">

        <property name="dataSource">

            <ref bean="dataSource"/>

        </property>

        <property name="mappingResources">

            <list>

                <value>com/pojo/User.hbm.xml</value>

            </list>

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.MySQLDialect

                </prop>

            </props>

        </property>

    </bean>

 

    <bean id="userDAO" class="com.dao.UserDAO">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

 

    <bean id="transactionManager"

          class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

       

    <bean id="userDAOProxy"

          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager">

            <ref bean="transactionManager"/>

        </property>

<span st

分享到:
评论

相关推荐

    Spring+SpringMVC+Hibernate框架集成详解

    在本文档中,我们将详细介绍如何将 Spring、SpringMVC 和 Hibernate 框架集成,以便构建一个完整的 Web 应用程序。我们将介绍如何配置 Spring 框架,如何配置 SpringMVC 框架,如何配置 Hibernate 框架,並且如何将...

    spring-Hibernate整合代码测试过程

    Spring通过其HibernateTemplate或SessionFactoryBean类提供了对Hibernate的集成支持,使得在Spring应用中使用Hibernate变得更加便捷。 2. **配置文件**:整合过程中,我们需要配置Spring的ApplicationContext.xml...

    Hibernate、Spring文档

    3. Spring ORM模块:Spring ORM集成了Hibernate,简化了在Spring应用中使用Hibernate的配置。 四、实战应用与最佳实践 1. 数据库设计:理解数据库规范化原理,合理设计实体关系,避免数据冗余和异常。 2. 性能优化...

    Mina-Spring-Hibernate.rar_mina_mina hibernate_spring mina

    Spring通过HibernateTemplate或JpaTemplate提供了一套便捷的数据库操作接口,封装了Hibernate的操作,使得在Spring应用中使用Hibernate变得简单。同时,Spring还支持基于注解的事务管理,可以无缝地与Hibernate配合...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

    在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...

    Struts,Hibernate,Spring集成开发宝典.pdf

    此外,Spring还提供了与Hibernate的集成,使得在Spring应用中使用Hibernate变得更加便捷。 本书将指导读者如何将这三个框架集成在一起,形成一个强大的企业级应用开发平台。通过实际案例,读者将学习到如何配置...

    idea工具创建的Spring+SpringMVC+Hibernate+maven项目

    标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...

    struts2 hibernate spring j集成

    此外,Spring还提供了与Hibernate的集成,方便在Spring应用中使用Hibernate进行数据操作。 将这三个框架集成,主要目标是构建一个完整的MVC应用,其中Struts2负责控制层,Hibernate负责数据访问层,Spring作为胶水...

    图书管理系统spring+struts+hibernate

    在本系统中,Spring作为“胶水”连接各个组件,如控制层的Struts和持久层的Hibernate,使得系统模块化,易于维护和扩展。此外,Spring还提供事务管理,确保数据操作的一致性。 Struts是Java Web应用的一个MVC框架,...

    Spring,SpringMvc,Hibernate

    标题中的"Spring,SpringMvc,Hibernate"涉及到的是Java开发中常用的三个开源框架,它们在企业级Web应用开发中起着核心作用。以下是这三个框架的详细解释: **Spring框架**是Java开发中的一个全面的轻量级容器,它...

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...

    spring+structs+Hibernate

    在SSH集成中,Spring主要负责管理整个应用的组件,包括Struts和Hibernate的实例。它通过IoC容器控制对象的生命周期和装配,使得各组件间的依赖关系变得松散,提高了代码的可维护性和可测试性。 Struts是一个MVC...

    springmvc, spring5.x , hibernate5.x 整合

    在Hibernate中,实体类需要继承Serializable接口,并使用@Entity注解标记。属性上应用@Column注解来指定数据库字段,@Id注解标识主键。为了实现CRUD操作,我们通常会创建对应的DAO接口和实现类,利用Session的方法如...

    acegi与spring、hibernate结合很好的例子

    - Spring通过HibernateTemplate或JpaTemplate提供了对Hibernate的封装,使得在Spring应用中使用Hibernate变得更加简单,避免了直接操作SessionFactory和Session。 - Spring事务管理(PlatformTransactionManager)...

    Spring4.0.2Hibernate4.3Freemarker2.3.20.zip.zip

    此外,4.3版本还加强了与Spring框架的集成,使得在Spring应用中使用Hibernate更加便捷。 **Freemarker模板引擎 2.3.20** Freemarker是一个开源的模板引擎,常用于生成HTML、XML等静态或动态内容。在Java Web应用中...

    maven+hibernate

    5. **整合Spring和Hibernate**: 在Spring应用中使用Hibernate,通常会创建一个`SessionFactory`的bean,并使用`LocalSessionFactoryBean`进行配置。然后,通过`PlatformTransactionManager`和`...

    S2SH整合是需要的jar文件struts2.2+spring3+hibernate3.6.rar

    通过HibernateTemplate或HibernateDaoSupport,开发者可以方便地在Spring应用中使用Hibernate。 5. **jar文件**:压缩包中的jar文件包含了这些框架的核心库,如struts2-core.jar、spring-context.jar、hibernate-...

    尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE

    开发者可以通过它来配置Hibernate的属性,如数据库连接信息、实体映射文件等,从而在Spring应用中使用Hibernate进行数据操作。 3. **Spring的依赖注入(Dependency Injection, DI)**: Spring的核心特性之一是DI,...

    Spring与Hibernate集成

    在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而Hibernate则是一个优秀的对象关系映射...

    Spring+SpringMVC +Hibernate 整合

    Spring、SpringMVC和Hibernate是Java开发中三大核心框架,它们的整合是企业级Web应用的常见架构选择。Spring作为基础框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;SpringMVC则负责处理HTTP请求,实现...

Global site tag (gtag.js) - Google Analytics