当前位置: 代码迷 >> Web前端 >> Struts2+Spring+Hibernate筹建全解
  详细解决方案

Struts2+Spring+Hibernate筹建全解

热度:297   发布时间:2012-07-15 20:11:36.0
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.文档说明:

我的Csdn http://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连接Access Hibernate连接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

  相关解决方案