Struts2+Spring+Hibernate搭建全解!
Struts2+Spring+Hibernate是J2EE的最新流行框架。
以下是部分搭建过程及源码:
1.先组合实现Hibernate4+Spring3支持,删除hibernate.cfg.xml文件,修改applicationContext.xml文件的内容,增加SessionFactory和dataSource的设置。
2.通过MyEclipse的向导方式,生成POJO类和对应的映射文件。
3.修改applicationContext.xml文件中<property name="mappingResources">元素的内容。
4.编写DAO接口和实现类。
5.修改applicationContext.xml文件,增加对Dao实现类的配置。
6.组合Struts2和Spring3,修改web.xml文件,增加struts2的所需要的过滤器配置。
7.增加struts2相应类库,增加struts2与spring的配置jar包。
8.拷贝struts.xml文件到src根目录下,再修改struts.xml文件,进行常量配置。
9.修改web.xml文件,配置Spring监听器,和上下文变量。并增加OpenSessionInViewFilter的设置。
10.写入action类。
11.配置struts.xml文件。
12.修改applicationContext.xml
13.编写Jsp文件。
14.加载运行项目。
?
1.文档说明:
我的Csdnhttp://blog.csdn.net/zl563143188
spring3.1 http://static.springsource.org/spring/docs/3.1.0.M2/spring-framework-reference/html/
struts2 http://struts.apache.org/2.x/docs/home.html
hibernate http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/
这是我的QQ空间,欢迎参观 http://user.qzone.qq.com/563143188
程序源码下载地址10MB:http://115.com/file/c2re58pm#
最新程序源码下载地址,一直在更新中............................... http://zz563143188.iteye.com/blog/1462413
程序lib下载地址100MB:http://115.com/file/c2re52n6#
数据库下载地址(可以将数据转为sql,或者mysql,默认access)http://115.com/file/andcz97r#
由于涉及技术比较多,一般很难运行成功,需要技术指导联系 QQ 563143188,电话 13823045912 张林
Struts2、Spring、Hibernate三者整合的过程示例
SSH简单整合(Struts2.2.3.1+Spring3.1.0+Hibernate4)
Struts2+Spring+Hibernate搭建全解!
Hibernate4 Struts2 Spring3整合
?
功能介绍:
1.支持 Hibernate连接AccessHibernate连接sqlsever Hibernate连接mysql
2.支持 Spring连接access数据库 spring连接mysql spring连接sqlsever数据库
3.支持 Spring动态数据源加载 Spring连接ibaits Spring JDBC连接
4.支持 Spring的事务管理 Spring AOP实现 Spring的权限管理
5.支持 Spring MVC及Spring国际化标签 Spring文件上传下载
6.支持 Spring 数据源加载属性文件
7.支持 struts2+hibernate4+spring3 及struts2+itbaits+spring设计结构
8.支持 ext+json+treepanel实现动态树
9.支持 jasperreport+ireport+excel打印
10.支持 freemarker 生成文件
11.支持 sitemesh修饰网站
12. 支持oscahe缓存 hibernate+ehcache缓存
13. 支持 struts2国际化
14 支持 velocity模板设计
15.支持 ext+dwr+json处理数据
16.支持 jquery图表制作
17.支持 log4j日志处理
18.支持 hibernate与ibaits同时访问数据库
19.支持 java读dll,ocx控制
20.支持 SSH、SSI框架同时使用
21.支持 Spring实时调度任务
22.支持随意更改BaseDaoImpl<T extends BaseModel,PK extends BasePK> extends BaseHibernate4SpringDaoImpl<T,PK>
?
?
二.下面是具体的代码实现:
1.顶层DAOp实现 :BaseHibernate4SpringDaoImpl
package com.senlo.analyze.core.common.dao.Impl;
// HibernateDaoSupport这个是hibernate 30的时候才需要继承
// hibernate4.0不需要继承了
@Repository
//public class BaseHibernate4SpringDaoImpl<M extends BaseModel, PK extends BasePK> implements IBaseDao<M, PK> {
public class BaseHibernate4SpringDaoImpl<M extends BaseModel,PK extends BasePK> implements IBaseDao<M,PK> {
protected static final Logger LOGGER = LoggerFactory
.getLogger(BaseHibernateDao.class);
private Class<M> entityClass;
private String HQL_LIST_ALL;
private String HQL_COUNT_ALL;
private String HQL_OPTIMIZE_PRE_LIST_ALL;
private String HQL_OPTIMIZE_NEXT_LIST_ALL;
private String pkName = null;
public Class<M> getEntityClass() {
return entityClass;
}
public void setEntityClass(Class<M> entityClass) {
this.entityClass = entityClass;
}
@SuppressWarnings("unchecked")
public BaseHibernate4SpringDaoImpl() {
if (getClass().getGenericSuperclass() instanceof ParameterizedType) {
entityClass = (Class<M>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
}
/*
* this.entityClass = (Class<T>) ((ParameterizedType) getClass()
* .getGenericSuperclass()).getActualTypeArguments()[0]; Field[] fields =
* this.entityClass.getDeclaredFields(); for (Field f : fields) { if
* (f.isAnnotationPresent(Id.class)) { this.pkName = f.getName(); } }
*
* // Assert.notNull(pkName); // TODO @Entity name not null HQL_LIST_ALL =
* "from " + this.entityClass.getSimpleName() + " order by " + pkName +
* " desc"; HQL_OPTIMIZE_PRE_LIST_ALL = "from " +
* this.entityClass.getSimpleName() + " where " + pkName + " > ? order by "
* + pkName + " asc"; HQL_OPTIMIZE_NEXT_LIST_ALL = "from " +
* this.entityClass.getSimpleName() + " where " + pkName + " < ? order by "
* + pkName + " desc"; HQL_COUNT_ALL = " select count(*) from " +
* this.entityClass.getSimpleName();
*/
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
public Session getSession() {
// 事务必须是开启的,否则获取不到
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public List FindAll(String[] columns) {
StringBuilder b = new StringBuilder(1024);
for (String s : columns) {
b.append("t." + s + ",");
}
b.setLength(b.length() - 1);
try {
String queryString = " select " + b + " from "
+ entityClass.getName() + " t ";
Query list = getSession().createQuery(queryString);
System.out.println("BaseHibernateSpringDaoImpl:" + queryString
+ "->" + list.list().size());
return list.list();
} catch (RuntimeException re) {
System.out.println(re.toString());
throw re;
}
}
@SuppressWarnings("unchecked")
public List<M> FindAll() {
StringBuilder b = new StringBuilder(1024);
System.out.println("=======================");
try {
String queryString = " from " + entityClass.getName()
+ " ";
Query list = getSession().createQuery(queryString);
System.out.println("BaseHibernateSpringDaoImpl:" + queryString
+ "->" + list.list().size());
return list.list();
} catch (RuntimeException re) {
System.out.println(re.toString());
throw re;
}
}
}
2.顶层IBaseDao接口
package com.senlo.analyze.core.common.dao;
public interface IBaseDao<M extends BaseModel,PK extends BasePK> {
public List FindAll(String[] columns);
public List FindAll();
}
3.与顶层DAO的中间层类BaseDaoImpl
package com.senlo.analyze.core.common.dao.Impl;
//BaseHibernateDaoImpl,BaseHibernateSpringDaoImpl,BaseDaoIbaImp,BaseDaoIbaSpringImp
//BaseHibernate4SpringDaoImpl,BaseHibernate3SpringDaoImpl 方法与数据连接
public class BaseDaoImpl<T extends BaseModel,PK extends BasePK> extends BaseHibernate4SpringDaoImpl<T,PK> {}
3.具体的DAO层接口
package com.senlo.analyze.main.dao;
public interface UserTabDao extends IBaseDao<Usertab,BasePK> {
}
4.具体的DAO层实现 BaseDaoImpl
package com.senlo.analyze.main.dao.Impl;
@Repository ("userTabDaoImpl") //spring 注入
public class UserTabDaoImpl extends BaseDaoImpl<Usertab,BasePK> implements UserTabDao {
}
5.service层的顶层接口
package com.senlo.analyze.core.common.service;
public interface IBaseSvr<T extends BaseModel, PK extends BasePK> {
public List FindAll(String[] columns);
public List FindAll();
}
6.service层的顶层实现
package com.senlo.analyze.core.common.service.Impl;
import java.util.List;
public class BaseSvrImpl<M extends BaseModel, PK extends BasePK> {
IBaseDao<M,PK> dao;
public IBaseDao<M, PK> getDao() {
return dao;
}
public void setDao(IBaseDao<M, PK> dao) {
this.dao = dao;
}
public List FindAll(String[] columns) {
return dao.FindAll(columns);
}
public List FindAll() {
return dao.FindAll();
}
}
7.service具体实现的接口:
package com.senlo.analyze.main.service;
public interface UserTabSvr extends IBaseSvr<Usertab,BasePK> {
}
8.service具体实现的接口:
package com.senlo.analyze.main.service.impl;
import javax.annotation.Resource;
@Service("userTabSvrImpl")
public class UserTabSvrImpl extends BaseSvrImpl<Usertab,BasePK> implements UserTabSvr {
UserTabDao dao ;//=new UserTabDaoImpl();
public UserTabDao getDao() {
return (UserTabDao)super.getDao();
}
@Resource(name="userTabDaoImpl")
public void setDao(UserTabDao dao) {
super.setDao(dao);
}
}
9.代码测试;
package com.senlo.analyze.main.test;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import com.senlo.analyze.main.bean.Usertab;
import com.senlo.analyze.main.service.UserTabSvr;
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)
public class THibernateSpringDao {
@Autowired
private UserTabSvr userTabSvr;
//@Rollback(false)
// 这里是能过读配置文件测试的方法
@Test
public void TestContextSpring() {
try {
System.out.println("开始读取数据");
//userTabSvr = SpringContextHolder.getBean("userTabSvrImpl");
List<Usertab> list = userTabSvr.FindAll();
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getLoginName() + "--"
+ list.get(0).getName());
}
} catch (Exception e) {
System.out.println(e.toString());
// TODO: handle exception
}
}
}
由于配置文件太多 详细说明:http://zz563143188.iteye.com/admin/blogs/1462413