MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程
新建web project:
命名为SSH,做如下设置:
新建后的工程目录如下:
然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加。
首先添加struts2.1支持:
做如下设置后点next。
选择jar包,至少选择下图中选择的两个:
然后添加Spring3.0支持,做如下设置:
然后是添加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视图,在视图下空白区右键新建一个数据库连接:
做如下设置:
接下来正式添加hibernate3.3:
在下面的设置上选择spring的配置文件,这样hibernate就交给spring进行管理:
至此,SSH框架添加完成。工程结构如下:
至此,整合完毕,接下来创建一个项目测试一下。
一、model层
新建两个实体类:User.java和Log.java,并生成相应的get、set方法,然后使用Annotation注解相应属性与数据库表中的字段的对应关系:
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的使用在本文并未实现),在表上右键,反向工程:
会在com.ecs610.dao.impl下得到一个名为UserDAO.java的文件,并且该文件有错误提示,引入User,删除冗余代码,并将UserDAO.java的文件名rename为UserDAOImpl.java。然后在UserDAOImpl.java中提取出(extract)接口,将接口命名为UserDAO.java,并将UserDAO.java移动到com.ecs610.dao包下:
项目结构图如下:
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层的类:
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>
关于“注入”的理解:
关于ref=”userDAO”的理解是在UserServiceImpl类中新建或者引用了名为userDAO的对象。在Spring下的含义是将id为userDAO的对象(bean)注入给了当前类(对象)。(上文的.xml文件中的下划线为横线的userDAO为同一个对象,即同一个bean)
“注入”:配置文件指定了当前bean新建了哪一个对象(指定了当前bean的名称)、该对象属于哪个类、该对象是否有set方法、引用了哪个bean等信息,这样是一种灵活的方式,通过不同的配置可以实现不同的功能(通过引用不同的bean)。
然后新建类UserServiceImpl的JUnit test类。首先新建一个和目录src同一级别的Source Folder,起名为test,用于存放测试类。然后在UserServiceImpl.java类上单击右键—>new—>other:
然后将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整合过程的更多相关文章
- CDH6.3.0下Apache Atlas2.1.0安装与配置
CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...
- 在VC6.0下如何调用Delphi5.0开发的进程内COM
因为本人的语言水平很差,考大学时150的总分,我考了个60分.外语也是,初中及格过一次,会考及格过一次.其它的时间好像从没有及格过.所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字.哈哈… ...
- Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
最近突然想弄一下phonegap,之前一直是听说,没亲自配置开发过.结果配置过程非常艰难啊.特别是android平台的配置,那叫一个麻烦,网上搜了半天都没找到非常好的资料.文章也都是抄来抄去,最烦的就 ...
- 转: MyEclipse 10.0,9.0,8.0 下添加jadClipse反编译插件
MyEclipse 10.0,9.0,8.0 下添加jadClipse反编译插件 (2012-11-19 15:36:35) 转载▼ 标签: myeclipse jad 反编译 插件 it 分类: M ...
- spring3.0的jar包详解
1. spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.sprin ...
- windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
之前在mac上安装调试过phonegap,现在公司用的是windows7,所以不得不再进行一次windows下的配置工作,顺便也写下来了 主要麻烦的地方是要在win7下添加好几个环境变量,这一块地方特 ...
- MyEclipse 10、9、8 添加jadClipse反编译插件
jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,如何将jadclipse加入到MyEclipse10.X,9.X,8.X当中: http://nchc ...
- struts2.3+spring3.2+hibernate4.2例子
有些教程比较老,可是版本更新不等人,基于马士兵老师小例子,自己重新引用了新的包,调试确实有点烦人,但是通过英文文档和google解决问题.官网的更新超快,struts2.3+spring3.2+hib ...
- Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)
Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...
随机推荐
- Ubuntu GNOME 13.04将关闭窗口的按钮放在最右边
转载请注明:转自http://blog.csdn.net/u010811449/article/details/9426187 先上图: 首先打开dconf系统配置编译器. 找到 rog -> ...
- C#代码安装Windows服务
using System;using System.Collections.Generic;using System.ServiceProcess;using System.Configuration ...
- Can't get Kerberos realm
1. Can't get Kerberos realm 原因分析: 原始代码为: org.apache.hadoop.security.UserGroupInformation.setConfigur ...
- windows 系统中的 afd 驱动
afd 的全称是 Ancillary Function Driver for WinSock,是 windows 系统网络部分的核心工具.同 Linux 类似,windows 的 socket 最终也 ...
- unix环境高级编程-3.10-文件共享(转)
unix系统支持在不同进程间共享打开的文件. 内核使用三种数据结果表示打开的文件. (1)每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件的描述符表,可将其视为一个矢量,每个描述符占用一项 ...
- LINQ to Entities 比较日期
//获取当天的数据 DrawRecordDA _recordDA = new DrawRecordDA(); var query = _recordDA.GetQuery(); //筛选 当天 //q ...
- Delphi读取不Word中不规则表格数据并转换成标准表格
程序需要,需要将word中不规则的表格数据转换为标准的表格,即合并的单元格按正常格式解析,word中的表格格式如下: 解析后数据如下: 借鉴了网上代码,如下处理: procedure TfrmMain ...
- 使用Kotlin优雅的开发Android应用
来源:https://juejin.im/post/5915c0a744d904006c4e3bcd demo下载地址:https://github.com/xiehui999/KotlinForAn ...
- TLS/HTTPS 证书生成与验证
最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在总结一下做个备忘 科普:TLS.SSL.HTTPS以及证书 不少人可能听过其中的超过3个名词,但它们究竟有什么关联呢? ...
- 团队工作效率分析工具gitstats
如果你是团队领导,关心团队的开发效率和工作激情:如果你是开源软件开发者,维护者某个repo:又或者,你关心某个开源软件的开发进度,那么你可以试一试gitstats. gitstats 是一个git仓库 ...