7-27 2,622 views
目前,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.创建数据库连接
1)首先在MyEclipse下切换Perspective至MyEclipse Database Explorer,在左侧DB Browser中右键点击,在对话框中选择“New”,创建数据库连接MySQL。数据库连接的配置如图1所示,需要填写URL、用户名、密码、驱动等信息。
2)数据库连接配置成功后,左侧DB Browser中会显示该连接,右键点击该连接,在对话框中选择“Open connection”,显示数据库中的详细信息,如图2所示。在数据库中已有一user表,在下面将使用Spring+Hibernate实现对该表的操作。
2.新建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所示,采用默认配置即可。
3.配置Hibernate
1)右键点击该工程,在对话框中选择“MyEclipse->Add Hibernate Capabilities…”,添加Hibernate,并进行相关配置,如图5、图6、图7、图8、图9所示。
由于需要使用Spring配置Hibernate,因此选中所有的Library。
选择Spring的配置文件applicationContext.xml进行配置。
选择已有的Spring配置文件,并使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id为sessionFactory。
配置数据源DataSource的bean id为dataSource,且其配置信息采用数据库连接MySQL。
不另写SessionFactory类,而采用Spring为Hibernate已设计的SessionFactory类。
4.数据库逆向工程
1)切换Perspective至MyEclipse Hibernate,右键点击数据表user,在对话框中选择“Hibernate Reverse Engineering…”,对user表的关系对象映射进行配置,如图10所示,其中第一个红框用于选择Java源文件目录,第二个红框用于选择是否创建关系对象映射文件,以hbm.xml结尾,第三个红框用于选择是否创建数据对象类,第四个红框用于选择是否创建数据访问对象类,均选择是,其他采用默认配置即可。
5.分析和测试
按上述步骤配置后就可以在工程中实现Spring和Hibernate的整合,以及user表的关系对象映射,工程目录如图11所示,其中src目录下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三个文件是与user表对应的数据对象类User.java、数据访问对象类UserDAO.java、关系对象映射文件User.hbm.xml。
applicationContext.xml内容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?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代码部分如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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代码部分如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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内容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?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表中写入数据,如下所示:
1 2 3 4 5 6 7 8 9 10 11 |
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表,如果该表已新增一条记录,说明配置成功。
版权属于: 我爱我家
原文地址: http://magicwt.com/2012/07/27/myeclipse%e4%b8%8bspringhibernate%e6%95%b4%e5%90%88/
转载时必须以链接形式注明原始出处及本声明。