`
youanyyou
  • 浏览: 196558 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Spring框架中Dao支持总结:spring中普通类使用hibernate

阅读更多
Dao 的支持类可以有好多,如: JdbcDaoSupport , HibernateDaoSupport ,JdoDaoSupport等,下面对最常用的HibernateDaoSupport与JdbcDaoSupport做一小总结:
一、在Spring框架中实现连接数据库方式:
1、、借助类HibernateDaoSupport的简约化实现:
借助这个类必须需要HIbernate框架,用到HIbernate里提供的HibernateTemplate模板,从而进行增、删、改、查操作。
TestA.java:
public class TestA extends HibernateDaoSupport{
public void test(){
     HibernateTemplate template = this.getHibernateTemplate();
     List list = template.find("from User");
     for(int i=0;i<list.size();i++){
      User u = (User)list.get(i);
      System.out.println(u.getUserid()+" "+u.getEmail());
     }
}

public static void main(String[] args) {
           ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
           TestA t = (TestA)ctx.getBean("testa");
           t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入SessionsFactory,如下:
applicationContext.xml:
        <bean id="testa" class="com.sun.demo.TestA">
        <property name="sessionFactory">
        <ref bean="mySessionFactory"/>
        </property>
        </bean>
2、、借助类JdbcDaoSupport的简约化实现:
借助这个类不需要HIbernate框架,也不需要有ORM的对象关联映射。但它和HibernateDaoSupport很类似,有JdbcTemplate来实现增、删、改、查操作。
TestA.java:
public class TestA extends JdbcDaoSupport{
    public void test(){
        int n = this.getJdbcTemplate().queryForInt("select max(userid) from User");
        System.out.println(n);
    }
public static void main(String[] args) {
   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
   TestA ta = (TestA)ctx.getBean("testa");
        ta.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入DataSource,如下:
applicationContext.xml:
        <bean id="testa" class="com.sun.demo.TestA">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>
       
二、编程式事务管理、声明式事务管理中HibernateDaoSupport与JdbcDaoSupport的应用:
1、编程式事务管理:
1>、JdbcDaoSupport编程式事物管理,必须继承JdbcDaoSupport类,得到JdbcTemplate从而实现事务管理;

TestA.java:
public class TestA extends JdbcDaoSupport{
public void test(){
     PlatformTransactionManager ptm = new DataSourceTransactionManager(this.getDataSource());
     TransactionTemplate tst = new TransactionTemplate(ptm);
     tst.execute(new TransactionCallback(){
    public Object doInTransaction(TransactionStatus status) {
      getJdbcTemplate().update("update User set password='1230' where userid='1001'");
      getJdbcTemplate().update("update User set email='4444444444444444444444444444444444' where userid='1002'");
      getJdbcTemplate().update("update User set phone='phone'");
      return null;
    }
     });
}


public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    TestA t = (TestA)ctx.getBean("testa");
    t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入DataSource,如下:
applicationContext.xml:
   <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    
     ... ...
    
     <property name="defaultAutoCommit">
     <value>false</value>
     </property>
   </bean>
    
        <bean id="testa" class="com.sun.demo.TestA">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>
2>、HibernateDaoSupport编程式事物管理,必须继承HibernateDaoSupport类,得到HibernateTemplate从而实现事务管理;
TestB.java:
public class TestB extends HibernateDaoSupport{
public void test(){
     HibernateTransactionManager hm = new HibernateTransactionManager(this.getSessionFactory());
     TransactionTemplate ttm = new TransactionTemplate(hm);
     ttm.execute(new TransactionCallback(){
    public Object doInTransaction(TransactionStatus status) {
     User u1 = new User();
     u1.setUserid("3001");
     u1.setPassword("3001");
     getHibernateTemplate().save(u1);
    
     User u2 = new User();
     u2.setUserid("3001");
     u2.setPassword("3002");
     getHibernateTemplate().save(u2);
     return null;
    }
     });
}

public static void main(String[] args) {
           ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
           TestB t = (TestB)ctx.getBean("testb");
        t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入SessionsFactory,如下:
applicationContext.xml:
   <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    
     ... ...
    
     <property name="defaultAutoCommit">
     <value>false</value>
     </property>
   </bean>
    
     <bean id="testb" class="com.sun.demo.TestB">
     <property name="sessionFactory">
     <ref bean="mySessionFactory"/>
     </property>
     </bean>
2、声明式事务管理:   
1>、JdbcDaoSupport声明式样事物管理,必须继承JdbcDaoSupport类;
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
        
         ... ....
  
   <property name="defaultAutoCommit">
   <value>false</value>
   </property>
</bean>
  
   需要在Spring配置文件中配置声明事务处理,用JdbcDaoSupport提供的DataSourceTransactionManager如下:
        <!-- 事务管理配置 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>
      
        <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="transactionManager"/>
        <!-- 事务管理属性 -->
        <property name="transactionAttributes">
           <props>
           <prop key="updateUser">PROPAGATION_REQUIRED</prop>
           </props>
        <!-- 事务管理目标bean -->
        </property>
        <property name="target" ref="userdao"></property>
        </bean>
       
        <bean id="userdao" class="com.sun.demo.UserDao">
        <property name="dataSource">
        <ref bean="myDataSource"/>
        </property>
        </bean>

IUserDao.java://定义接口
public interface IUserDao {
public void updateUser();
}

UserDao.java:
public class UserDao extends JdbcDaoSupport implements IUserDao{
       public void updateUser(){
        this.getJdbcTemplate().update("update User set password='password1' where userid='1001'");
           this.getJdbcTemplate().update("update User set password='password9999999999999999999999999999999' where userid='1002'");
       }
}

TestA.java://调用updateUser()方法
public class{
   
    public void test(){
          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDao u = (IUserDao)ctx.getBean("baseTransactionProxy");
          u.updateUser();
    }


public static void main(String[] args) {
           TestA t = new TestA();
           t.test();
}
}
2>、HibernateDaoSupport声明式事物管理,必须继承HibernateDaoSupport类;
IUserDao.java://定义接口
public interface IUserDao {
public void updateUser();
}
UserDao.java:
public class UserDao extends HibernateDaoSupport implements IUserDao{
       public void updateUser(){
              User u1 = new User();
              u1.setUserid("1001");
              u1.setPassword("5001");
              this.getHibernateTemplate().update(u1);
             
             
              User u2 = new User();
              u2.setUserid("1003");
              u2.setPassword("20015555555555555555555555555555555555555555555");
              this.getHibernateTemplate().update(u2);
       }
}

测试:
public class TestA{
   
    public void test(){
          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
       IUserDao userdao= (IUserDao)ctx.getBean("userproxy");
          userdao.updateUser();
    }


public static void main(String[] args) {
           TestA t = new TestA();
           t.test();
}
}
需要在Spring配置文件中配置声明事务处理,用JdbcDaoSupport提供的HibernateTransactionManager如下:
applicationContext.xml:
        <!-- 事务管理配置 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
        <ref bean="mySessionFactory"/>
        </property>
        </bean>
       
        <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="transactionManager" ref="transactionManager"/>
        <!-- 事务管理属性 -->
        <property name="transactionAttributes">
           <props>
           <prop key="update*">PROPAGATION_REQUIRED</prop>
           <prop key="save*">PROPAGATION_REQUIRED</prop>
           <prop key="delete*">PROPAGATION_REQUIRED</prop>
           </props>
        <!-- 事务管理目标bean -->      
        </property>
        </bean>
       
        <bean id="userdao" class="com.sun.demo.UserDao">
        <property name="sessionFactory">
        <ref bean="mySessionFactory"/>
        </property>
        </bean>
       
        <bean id="userproxy" parent="baseTransactionProxy">
        <property name="target" ref="userdao"></property>
        </bean>

深圳人才网 深圳招聘网 深圳人才招聘网 深圳人才大市场 

企业、个人免费注册,获取想要的 深圳 软件工程师招聘信息 月薪最低3000-8000,更有高端猎头职位! 

www.szrcwz.com                                                                                                                                           

                  Google 提供的广告

分享到:
评论
1 楼 lzy5710303 2010-12-13  
写得不错

相关推荐

    Spring对DAO的支持.doc

    总结来说,Spring对DAO的支持显著提高了代码的可读性和可维护性,降低了系统组件间的耦合,并通过提供对JDBC和Hibernate的抽象,使得数据访问变得更加简单和安全。这种支持鼓励开发者采用面向接口的编程风格,有利于...

    Spring + Hibernate DAO 代码上传

    本资源“Spring + Hibernate DAO 代码上传”显然提供了一组整合了这两个框架的代码示例,帮助开发者理解如何在实际项目中利用它们进行数据访问操作。以下是关于Spring和Hibernate以及它们整合使用的详细知识点: 1....

    spring几种Dao支持配置

    在Spring框架中,DAO(Data Access Object)层是应用程序与数据库交互的核心部分。Spring提供了多种方式来支持DAO的配置,使得开发人员可以灵活地选择最适合项目需求的数据访问策略。以下将详细阐述Spring对DAO支持...

    spring+hibernate框架搭建demo

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于不同的领域,Spring作为一个全面的后端开发框架,而Hibernate则是一个对象关系映射(ORM)工具,主要用于数据库操作。本篇文章将深入探讨如何...

    spring和hibernate框架

    3. 整合 Spring 和 Hibernate:在 Spring 配置文件中声明 Hibernate 的 SessionFactory Bean,并使用 Spring 的事务管理器来控制事务。 4. 实体类和数据库表映射:使用 Hibernate 的注解或 XML 映射文件,将 Java 类...

    Struts2+hibernate+spring整合泛型DAO

    总结来说,"Struts2+hibernate+spring整合泛型DAO"是一种常见的Java Web开发模式,它利用三大框架的优势,结合泛型设计,提高了代码复用,降低了维护成本,使得开发者能更专注于业务逻辑,而不是基础架构。

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    Struts2、Spring和Hibernate是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面,协同工作可以构建出高效、可维护的复杂Web应用。在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 ...

    hibernate spring通用dao

    spring集成hibernate通用dao,泛型,server都可以调用

    org.springframework.dao.InvalidDataAccessApiUsageException

    这类异常通常发生在使用Spring框架进行数据库操作(如增、删、改)时,特别是在采用Spring的注解式事务管理机制时。 #### 异常发生描述 当使用Spring + Hibernate (SSH) 的注解开发方式时,开发者在执行增、删、改...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    struts2+hibernate+spring框架整合实列

    Struts2、Hibernate和Spring是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面:Struts2专注于表现层,Hibernate处理数据持久化,而Spring则在业务逻辑和依赖注入方面发挥重要作用。将这三个框架整合...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    总结起来,使用Maven在Eclipse中搭建Spring+Spring MVC+Hibernate框架涉及以下步骤: 1. 创建Maven项目,配置`pom.xml`。 2. 配置Spring和Spring MVC的XML配置文件。 3. 设置Hibernate配置,创建实体类。 4. 构建Web...

    spring+hibernate 框架实例

    Spring 和 Hibernate 是两个非常重要的 Java 开发框架,它们在企业级应用开发中有着广泛的应用。Spring 是一个全面的后端开发框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及大量的集成...

    J2EE面试题(包含了大部分的框架面试题如:hibernate Spring Strust 等)

    4. Spring的数据访问支持:JDBC模板,DAO支持,集成Hibernate、MyBatis等ORM框架。 5. Spring Boot的快速开发特性,自动配置和Starter POMs的使用。 Struts则是经典的MVC框架,面试中可能会涉及: 1. Struts 2的...

    spring+spring mvc+hibernate框架整合简单小例子

    在IT行业中,Spring、Spring MVC和Hibernate是三个非常重要的开源框架,它们分别在不同层面上为Java应用提供了强有力的支持。本篇文章将详细讲解这三个框架的基本概念、整合过程以及为何适合初学者。 首先,Spring...

    springmvc-spring4.3-hibernate5框架整合

    标题 "springmvc-spring4.3-hibernate5框架整合" 暗示了这是一个关于集成Spring MVC、Spring 4.3...通过这个项目,开发者可以学习到如何有效地组织和管理大型项目的结构,以及如何在实际开发中使用这些流行的Java框架。

    springMVC+spring+Hibernate框架

    Spring MVC、Spring 和 Hibernate 是Java开发中非常流行的三大框架,它们共同构成了企业级Web应用的基础架构。Spring MVC作为Spring框架的一部分,主要负责处理HTTP请求和响应,提供模型-视图-控制器(MVC)设计模式...

    spring hibernate 泛型DAO

    总结起来,"Spring Hibernate 泛型DAO"的主题涵盖了Spring框架的IoC容器与Hibernate的ORM能力,通过泛型和Criteria查询,我们可以实现更加高效、可复用的DAO层代码。这样的设计使得项目结构更加清晰,减少了代码冗余...

    String+Spring+Hibernate搭建的框架

    这个框架集合是Java开发领域中广泛使用的三大技术,它们分别是Spring框架、Hibernate持久化框架以及Struts(而不是String,可能是打字错误) MVC框架。下面我们将深入探讨这三个组件及其在构建Web应用中的作用。 **...

Global site tag (gtag.js) - Google Analytics