MyEclipse下Spring+Hibernate整合

本小妞迷上赌 提交于 2020-02-08 20:54:03

目前,SSH(Struts+Spring+Hibernate)是Web开发的一种常用框架组合,Struts实现了MVC,Hibernate实现了关系对象映射,Spring实现了基于Bean的配置管理。本文使用 MyEclipse实现Spring+Hibernate的整合。
软件和框架使用版本:

  • MyEclipse:8.0
  • Spring:2.5
  • Hibernate:3.2
  • MySQL:5.1

创建数据库连接

  1. 首先在MyEclipse下切换Perspective至MyEclipse Database Explorer,在左侧DB Browser中右键点击,在对话框中选择“New”,创建数据库连接MySQL。数据库连接的配置如图1所示,需要填写URL、用户名、密码、驱动等信息。

  2. 数据库连接配置成功后,左侧DB Browser中会显示该连接,右键点击该连接,在对话框中选择“Open connection”,显示数据库中的详细信息,如图2所示。在数据库中已有一user表,在下面将使用Spring+Hibernate实现对该表的操作。

新建Web工程,并配置Spring

  1. 切换Perspective至MyEclipse Java Enterprise,新建Web工程ssh,如图3所示。如果在随后的工作中还需整合Struts 2,则J2EE Specification Level应选择Java EE 5.0,此处暂选用默认配置J2EE 1.4。

  2. 右键点击该工程,在对话框中选择“MyEclipse->Add Spring Capabilities…”,添加Spring,并进行相关配置,如图4所示,采用默认配置即可。

配置Hibernate

  1. 右键点击该工程,在对话框中选择“MyEclipse->Add Hibernate Capabilities…”,添加Hibernate,并进行相关配置,如图5、图6、图7、图8、图9所示。
    由于需要使用Spring配置Hibernate,因此选中所有的Library。

  2. 选择Spring的配置文件applicationContext.xml进行配置。

  3. 选择已有的Spring配置文件,并使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id为sessionFactory。

  4. 配置数据源DataSource的bean id为dataSource,且其配置信息采用数据库连接MySQL。

  5. 不另写SessionFactory类,而采用Spring为Hibernate已设计的SessionFactory类。

数据库逆向工程

  1. 切换Perspective至MyEclipse Hibernate,右键点击数据表user,在对话框中选择“Hibernate Reverse Engineering…”,对user表的关系对象映射进行配置,如图10所示,其中第一个红框用于选择Java源文件目录,第二个红框用于选择是否创建关系对象映射文件,以hbm.xml结尾,第三个红框用于选择是否创建数据对象类,第四个红框用于选择是否创建数据访问对象类,均选择是,其他采用默认配置即可。

分析和测试

按上述步骤配置后就可以在工程中实现Spring和Hibernate的整合,以及user表的关系对象映射,工程目录如图11所示,其中src目录下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三个文件是与user表对应的数据对象类User.java、数据访问对象类UserDAO.java、关系对象映射文件User.hbm.xml。


applicationContext.xml内容如下所示:
123456789101112131415161718192021222324252627282930313233343536
 <beans     xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:p="http://www.springframework.org/schema/p"     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>         <property name="url" value="jdbc:mysql://localhost:3306/web"></property>         <property name="username" value="root"></property>         <property name="password" value="root"></property>     </bean>     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">         <property name="dataSource">             <ref bean="dataSource" />         </property>         <property name="hibernateProperties">             <props>                 <prop key="hibernate.dialect">                     org.hibernate.dialect.MySQLDialect                  </prop>             </props>         </property>         <property name="mappingResources">             <list>                 <value>pojo/User.hbm.xml</value>            </list>         </property>    </bean>    <bean id="UserDAO" class="pojo.UserDAO">         <property name="sessionFactory">             <ref bean="sessionFactory" />         </property>     </bean></beans>

其中,bean dataSource实现数据库连接配置,bean sessionFactory实现Hibernate的SessionFactory,并使用bean dataSource的连接配置,bean UserDAO实现User数据对象访问,并使用bean sessionFactory创建会话。
User.java代码部分如下:

12345678910111213141516171819202122232425
public class  implements java.io.Serializable {          private Integer id;      private String password;      private String name;      private String school;      // Constructors      /** default constructor */     public () {      }      /** full constructor */     public (String password, String name, String school) {          this.password = password;          this.name = name;          this.school = school;      }      // Property accessors    ....}

其中,对User对象类进行了定义,包括与user表字段对应的属性值、构造函数、Get/Set函数等。
UserDAO.java代码部分如下所示:

1234567891011121314151617181920212223
public class UserDAO extends HibernateDaoSupport {      private static final Log log = LogFactory.getLog(UserDAO.class);      // property constants      public static final String PASSWORD = "password";      public static final String NAME = "name";      public static final String SCHOOL = "school";      protected void initDao() {          // do nothing      }      public void save(User transientInstance) {          log.debug("saving User instance");          try {              getHibernateTemplate().save(transientInstance);              log.debug("save successful");          } catch (RuntimeException re) {              log.error("save failed", re);              throw re;          }      }    ...}

该类继承了Spring的HibernateDaoSupport类,调用对象实例本身的getHibernateTemplate获取HibernateTemplate对象,进而调用其save、delete等方法实现数据的增加、删改等操作。
User.hbm.xml内容如下所示:

1234567891011121314151617181920212223
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--       Mapping file autogenerated by MyEclipse Persistence Tools  --> <hibernate-mapping>     <class name="pojo.User" table="user" catalog="web">         <id name="id" type="java.lang.Integer">             <column name="id" />             <generator class="identity" />         </id>         <property name="password" type="java.lang.String">             <column name="password" length="10" not-null="true" />         </property>         <property name="name" type="java.lang.String">             <column name="name" length="10" not-null="true" />         </property>         <property name="school" type="java.lang.String">             <column name="school" length="30" not-null="true" />         </property>     </class> </hibernate-mapping>

其中定义了user表和User类的关系对象映射。
在UserDAO中编写一个主函数实现向user表中写入数据,如下所示:

1234567891011
public static void main(String args[])  {      //从src/applicationContext.xml装载BeanFactory      Resource res =new FileSystemResource("src/applicationContext.xml");           BeanFactory factory = new XmlBeanFactory(res);      //从BeanFactory获取UserDAO      UserDAO userDAO = (UserDAO) factory.getBean("UserDAO");      //添加新User      User user = new User("123","Tom","Tsinghua");      userDAO.save(user);       }

执行后,查看user表,如果该表已新增一条记录,说明配置成功。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!