[Spring] Spring学习笔记--Spring + Hibernate

appcontext.xml

  <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
       "::URL::http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>   
        <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource"></ref>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>ProduceType.hbm.xml</value>
    </list>
    </property>
      </bean>
     
    </beans>
   
ProduceTypeDAO.java

package com.my.dome;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.my.db.RedaProduceType;

public class ProduceTypeDAO extends HibernateDaoSupport{

public List findAll(){
List list = this.getHibernateTemplate().loadAll(RedaProduceType.class);

for(int i=0;i RedaProduceType redaProduceType = (RedaProduceType) list.get(i);
System.out.println(redaProduceType.getId());
System.out.println(redaProduceType.getTypeName());
}

return list;
}
}

Test.java
package com.my.dome;

import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.my.db.RedaProduceType;

public class Test {

public static void main(String[] args) throws Exception {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("appcontext.xml");

ProduceTypeDAO dao = (ProduceTypeDAO)applicationContext.getBean("RedaProduceTypeDAOSpring");

dao.findAll();
}


《精通Spring》书上的例子和《Spring 开发参考手册》都提到了Spring配置文件和DAO类的实现,却都没有给出测试类的调用代码。自己完成测试类的调用时,老是出错。

首先是Hibernate的版本困扰,Hibernate3较之Hibernate2整个package的目录由net.sf移至org包,Spring提供对Hibernate2和Hibernate3的支持。使用Hibernate3时,在编写Spring配置文件时要注意在sessionFactory Bean的class是org.springframework.orm.hibernate3.LocalSessionFactoryBean,而不是org.springframework.orm.hibernate.LocalSessionFactoryBean。hibernate.dialect是org.hibernate.dialect.MySQLDialect,而不是net.sf.hibernate.dialect.MySQLDialect。包括HibernateDaoSupport,也需要指明是org.springframework.orm.hibernate3.support.HibernateDaoSupport而不是org.springframework.orm.hibernate.support.HibernateDaoSupport。

再者,测试类时,需要使用ApplicationContext装载Bean的实例,而不是通过BeanFactory装载。对于ApplicationContext而言,所有JavaBean实例都会被创建,而BeanFactory则只有在调用getBean才会被创建。如果使用BeanFactory则必须先调用getBean获取SessioinFactory实例,再获取DAO实例。


遗留的几个问题:

1)SpringIDE3.1.5与Eclipse3.2不匹配,MyEclipse4.1里带的SpringIDE与Eclipse3.1配合得倒是不错。

2)HibernateSyn3.1.9生成的DAO类,似乎只支持JDK5.0,要支持JDK1.4需要改写DAO模板文件。

posted @ 2006-10-24 09:25  vanuan  阅读(95)  评论(0编辑  收藏  举报