MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

时间:2022-02-27 00:35:19

新建web project:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

命名为SSH,做如下设置:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

新建后的工程目录如下:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加。

首先添加struts2.1支持:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

做如下设置后点next。

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

选择jar包,至少选择下图中选择的两个:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

然后添加Spring3.0支持,做如下设置:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

然后是添加hibernate3.3。为了在添加hibernate时,可以自动在配置文件里加入数据库的连接信息而不用再去手动写,需要在添加hibernate前配置一下数据库连接。我用的是mysql5.5,在mysql中新建数据库ssh,然后新建两张表:

CREATE TABLE `user` (

`id` int(100) NOT NULL auto_increment,

`username` varchar(500) NOT NULL,

`password` varchar(500) NOT NULL,

PRIMARY KEY  (`id`)

);

CREATE TABLE `_log` (

`id` int(100) NOT NULL auto_increment,

`msg` varchar(500) NOT NULL,

PRIMARY KEY  (`id`)

);

然后在MyEclipse里打开DB Browser视图,在视图下空白区右键新建一个数据库连接:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

做如下设置:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

接下来正式添加hibernate3.3:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

在下面的设置上选择spring的配置文件,这样hibernate就交给spring进行管理:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

至此,SSH框架添加完成。工程结构如下:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

至此,整合完毕,接下来创建一个项目测试一下。

一、model层

新建两个实体类:User.java和Log.java,并生成相应的get、set方法,然后使用Annotation注解相应属性与数据库表中的字段的对应关系:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

User.java

package com.ecs610.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name = "user")
public class User {
private int id;
private String userName;
private String password; @Id
@GeneratedValue
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

Log.java

package com.ecs610.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name="_log")
public class Log {
private int id;
private String msg; @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
} }

二、 DAO 层

利用MyEclipse的反向工程功能创建DAO接口及实现(以创建UserDAO及UserDAOImpl为例,Log的使用在本文并未实现),在表上右键,反向工程:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

会在com.ecs610.dao.impl下得到一个名为UserDAO.java的文件,并且该文件有错误提示,引入User,删除冗余代码,并将UserDAO.java的文件名rename为UserDAOImpl.java。然后在UserDAOImpl.java中提取出(extract)接口,将接口命名为UserDAO.java,并将UserDAO.java移动到com.ecs610.dao包下:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

项目结构图如下:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

UserDAO.java

package com.ecs610.dao;

import java.util.List;

import com.ecs610.model.User;

public interface UserDAO {

	public abstract void save(User transientInstance);

	public abstract void delete(User persistentInstance);

	public abstract User findById(java.lang.Integer id);

	public abstract List findByUserName(Object userName);

	public abstract List findAll();

	public abstract User merge(User detachedInstance);

}

UserDAOImpl.java

package com.ecs610.dao.impl;

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ecs610.dao.UserDAO;
import com.ecs610.model.User; public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
private static final Logger log = LoggerFactory.getLogger(UserDAOImpl.class);
// property constants
public static final String PASSWORD = "password";
public static final String USER_NAME = "userName"; 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;
}
} public void delete(User persistentInstance) {
log.debug("deleting User instance");
try {
getHibernateTemplate().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
} public User findById(java.lang.Integer id) {
log.debug("getting User instance with id: " + id);
try {
User instance = (User) getHibernateTemplate().get(
"com.ecs610.dao.impl.User", id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
} public List findByProperty(String propertyName, Object value) {
log.debug("finding User instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from User as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
} public List findByUserName(Object userName) {
return findByProperty(USER_NAME, userName);
} public List findAll() {
log.debug("finding all User instances");
try {
String queryString = "from User";
return getHibernateTemplate().find(queryString);
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
} public User merge(User detachedInstance) {
log.debug("merging User instance");
try {
User result = (User) getHibernateTemplate().merge(detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}
}

三、Service层

按照下图的结构新建Service层的类:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

UserService是接口类,UserServiceImpl是对应的实现类。各类的内容如下:

UserService.java

package com.ecs610.service;

import com.ecs610.model.User;

public interface UserService {

	public abstract void add(User user);

}

UserServiceImpl.java

package com.ecs610.service.impl;

import com.ecs610.dao.UserDAO;
import com.ecs610.model.User;
import com.ecs610.service.UserService; public class UserServiceImpl implements UserService { private UserDAO userDAO; public UserDAO getUserDAO() {
return userDAO;
} public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public void add(User user) {
this.userDAO.save(user);
} }

然后,修改applicationContext.xml文件,实现“注入”:

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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.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/ssh" />
<property name="username" value="root" />
<property name="password" value="hel610" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.ecs610.model.User</value>
<value>com.ecs610.model.Log</value>
</list>
</property>
</bean> <bean id="userDAO" class="com.ecs610.dao.impl.UserDAOImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean id="logDAO" class="com.ecs610.dao.impl.LogDAOImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean id="userService" class="com.ecs610.service.impl.UserServiceImpl">
<property name="userDAO" ref="userDAO" />
</bean> </beans>

关于“注入”的理解:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

关于ref=”userDAO”的理解是在UserServiceImpl类中新建或者引用了名为userDAO的对象。在Spring下的含义是将id为userDAO的对象(bean)注入给了当前类(对象)。(上文的.xml文件中的下划线为横线的userDAO为同一个对象,即同一个bean)

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

“注入”:配置文件指定了当前bean新建了哪一个对象(指定了当前bean的名称)、该对象属于哪个类、该对象是否有set方法、引用了哪个bean等信息,这样是一种灵活的方式,通过不同的配置可以实现不同的功能(通过引用不同的bean)。

然后新建类UserServiceImpl的JUnit test类。首先新建一个和目录src同一级别的Source Folder,起名为test,用于存放测试类。然后在UserServiceImpl.java类上单击右键—>new—>other:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

然后将UserServiceImplTest.java的内容修改为如下:

UserServiceImplTest.java

package com.ecs610.service.impl;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ecs610.model.User;
import com.ecs610.service.UserService; public class UserServiceImplTest { @Test
public void testAdd() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service = (UserServiceImpl)applicationContext.getBean("userService");
User u = new User();
u.setId(1);
u.setUserName("zhangsan");
u.setPassword("admin");
service.add(u);
}
}

接下来进行测试,在UserServiceImplTest.java 文件内右键— >Run As — >JUnit Test :

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

运行状态和结果如下图:

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程的更多相关文章

  1. CDH6&period;3&period;0下Apache Atlas2&period;1&period;0安装与配置

    CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...

  2. 在VC6&period;0下如何调用Delphi5&period;0开发的进程内COM

    因为本人的语言水平很差,考大学时150的总分,我考了个60分.外语也是,初中及格过一次,会考及格过一次.其它的时间好像从没有及格过.所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字.哈哈… ...

  3. Mac 10&period;9x下安装配置phonegap3&period;0开发环境 &lpar;涉及android sdk配置&rpar;

    最近突然想弄一下phonegap,之前一直是听说,没亲自配置开发过.结果配置过程非常艰难啊.特别是android平台的配置,那叫一个麻烦,网上搜了半天都没找到非常好的资料.文章也都是抄来抄去,最烦的就 ...

  4. 转&colon; MyEclipse 10&period;0&comma;9&period;0&comma;8&period;0 下添加jadClipse反编译插件

    MyEclipse 10.0,9.0,8.0 下添加jadClipse反编译插件 (2012-11-19 15:36:35) 转载▼ 标签: myeclipse jad 反编译 插件 it 分类: M ...

  5. spring3&period;0的jar包详解

    1. spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.sprin ...

  6. windows7下安装配置phonegap3&period;0 &lpar;cordavo&rpar;开发环境 &lpar;涉及android sdk配置&rpar;

    之前在mac上安装调试过phonegap,现在公司用的是windows7,所以不得不再进行一次windows下的配置工作,顺便也写下来了 主要麻烦的地方是要在win7下添加好几个环境变量,这一块地方特 ...

  7. MyEclipse 10、9、8 添加jadClipse反编译插件

    jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,如何将jadclipse加入到MyEclipse10.X,9.X,8.X当中: http://nchc ...

  8. struts2&period;3&plus;spring3&period;2&plus;hibernate4&period;2例子

    有些教程比较老,可是版本更新不等人,基于马士兵老师小例子,自己重新引用了新的包,调试确实有点烦人,但是通过英文文档和google解决问题.官网的更新超快,struts2.3+spring3.2+hib ...

  9. Jbpm4&period;4&plus;hibernate3&period;5&period;4&plus;spring3&period;0&period;4&plus;struts2&period;1&period;8整合例子(附完整的请假流程例子&comma;jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

随机推荐

  1. 国内版Office 365和Azure AAD绑定的问题及解决方案

      背景: 1. 开发人员要做的事情,是希望在应用程序里面能调用Office 365 的API(Microsoft Graph)来动态添加Office 365账号 2. 如果需要调用这些API,必须在 ...

  2. OC中NSArray

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  3. 魅蓝Note2 在Android Studio 与 Eclipse中无法被检测到

    昨天到手的Note2 结果发现测试不了,一看魅蓝的版本是android 5.1,然后更新的自己的SDK. 最后…… 仍然不能识别到手机. ———————————— 今天在*上搜 ...

  4. list集合中指定字段去重

    在开发中,有时会需要指定字段去重,以下为实现方法: 假设有个房地产权的类,其中宗地代码ZDDM值重复,而我们在前端页面显示时,只需要一条数据,因为公共字段都一样: IEqualityComparer需 ...

  5. &lbrack;Javascript&rsqb; Proper use of console&period;assert in JavaScript

    Learn about console.assert, which is syntactic sugar for logging an error the console when a given c ...

  6. Docker 第三篇--构建Image

    什么是 docker Image 和container? 我们先来看看官网是怎么说的. Docker Engine provides the core Docker technology that e ...

  7. mock server 前后端分离小结(转)

    1.前台开发受限于后台开发的速度 2.后台提供给前台的接口缺字段,时常需要联调 基于Mock Server开发的好处: 对于前端来讲,可以独立于后端进行开发. 对于后端来讲,根据前端定义的接口进行开发 ...

  8. 201521123005《java程序设计》第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ·继承(是什么,意义) -父类(被继承的类) -子类(继承父类) -多态(解决重复代码的问题 ...

  9. Beta Scrum Day 6

    听说

  10. 二、使用docker-compose搭建AspNetCore开发环境

    1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上 ...