目前,SSH(Struts+Spring+Hibernate)是Web开发的一种经常使用框架组合,Struts实现了MVC,Hibernate实现了关系对象映射,Spring实现了基于Bean的配置管理。本文使用 MyEclipse实现Spring+Hibernate的整合。java
软件和框架使用版本:mysql
MyEclipse:8.0web
Spring:2.5spring
Hibernate:3.2sql
MySQL:5.1数据库
1.建立数据库链接apache
1)首先在MyEclipse下切换Perspective至MyEclipse Database Explorer,在左侧DB Browser中右键点击,在对话框中选择“New”,建立数据库链接MySQL。数据库链接的配置如图1所示,须要填写URL、用户名、密码、驱动等信息。session
图 1app
2)数据库链接配置成功后,左侧DB Browser中会显示该链接,右键点击该链接,在对话框中选择“Open connection”,显示数据库中的详细信息,如图2所示。在数据库中已有一user表,在下面将使用Spring+Hibernate实现对该表的操做。框架
图 2
2.新建Web工程,并配置Spring
1)切换Perspective至MyEclipse Java Enterprise,新建Web工程ssh,如图3所示。若是在随后的工做中还需整合Struts 2,则J2EE Specification Level应选择Java EE 5.0,此处暂选用默认配置J2EE 1.4。
图 3
2)右键点击该工程,在对话框中选择“MyEclipse->Add Spring Capabilities...”,添加Spring,并进行相关配置,如图4所示,采用默认配置便可。
图 4
3.配置Hibernate
1)右键点击该工程,在对话框中选择“MyEclipse->Add Hibernate Capabilities...”,添加Hibernate,并进行相关配置,如图五、图六、图七、图八、图9所示。
因为须要使用Spring配置Hibernate,所以选中全部的Library。
图 5
选择Spring的配置文件applicationContext.xml进行配置。
图 6
选择已有的Spring配置文件,并使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id为sessionFactory。
图 7
配置数据源DataSource的bean id为dataSource,且其配置信息采用数据库链接MySQL。
图 8
不另写SessionFactory类,而采用Spring为Hibernate已设计的SessionFactory类。
图 9
4.数据库逆向工程
1)切换Perspective至MyEclipse Hibernate,右键点击数据表user,在对话框中选择“Hibernate Reverse Engineering...”,对user表的关系对象映射进行配置,如图10所示,其中第一个红框用于选择Java源文件目录,第二个红框用于选择是否建立关系对象映射文件,以hbm.xml结尾,第三个红框用于选择是否建立数据对象类,第四个红框用于选择是否建立数据访问对象类,均选择是,其余采用默认配置便可。
图 10
4.分析和测试
按上述步骤配置后就能够在工程中实现Spring和Hibernate的整合,以及user表的关系对象映射,工程目录如图11所示,其中src目录下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三个文件是与user表对应的数据对象类User.java、数据访问对象类UserDAO.java、关系对象映射文件User.hbm.xml。
图 11
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: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代码部分以下:
- public class User implements java.io.Serializable {
- // Fields
- private Integer id;
- private String password;
- private String name;
- private String school;
- // Constructors
- /** default constructor */
- public User() {
- }
- /** full constructor */
- public User(String password, String name, String school) {
- this.password = password;
- this.name = name;
- this.school = school;
- }
- // Property accessors
- ....
- }
其中,对User对象类进行了定义,包括与user表字段对应的属性值、构造函数、Get/Set函数等。
UserDAO.java代码部分以下所示:
- 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内容以下所示:
- <?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表中写入数据,以下所示:
- 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表,若是该表已新增一条记录,说明配置成功。
图 12