您的位置:首页 > 编程语言 > Java开发

Struts2+Spring2.5+Hibernate3整合

2012-09-12 09:54 519 查看
今天主要集成Struts2 + Spring2.5 + Hibernate3的开发。首先我们先整合 Spring2.5 + Hibernate3,然后在此基础上整合Struts2.

第一步:首先罗列出Spring2.5 + Hibernate3 + 数据库驱动的必要Jar文件并加入到lib目录里:

Hibernate3 所需的Jar文件:



Spring2.5 所需的Jar文件:



SqlServer驱动所需的Jar文件:



第二步:在src下创建spring配置文件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: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-2.5.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<context:annotation-config/>

<context:component-scan base-package="com.zhaoxuan.projectdemo"/>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

<property name="jdbcUrl" value="jdbc:sqlserver://localhost:1032;DatabaseName=SSH2ProjectDemoDB"/>

<property name="user" value="sa"/>

<property name="password" value="sql2005"/>

<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->

<property name="initialPoolSize" value="1"/>

<!--连接池中保留的最小连接数。-->

<property name="minPoolSize" value="1"/>

<!--连接池中保留的最大连接数。Default: 15 -->

<property name="maxPoolSize" value="300"/>

<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

<property name="maxIdleTime" value="60"/>

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

<property name="acquireIncrement" value="5"/>

<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->

<property name="idleConnectionTestPeriod" value="60"/>

</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mappingResources">

<list>

<value>com/zhaoxuan/projectdemo/pojo/Users.hbm.xml</value>

</list>

</property>

<property name="hibernateProperties">

<value>

hibernate.dialect=org.hibernate.dialect.SQLServerDialect

hibernate.hbm2ddl.auto=update

hibernate.show_sql=false

hibernate.format_sql=false

</value>

</property>

</bean>

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

<!--使用基于注解方式配置事务 -->

<tx:annotation-driven transaction-manager="txManager"/>

</beans>


第三步:在src下创建包com.zhaoxuan.projectdemo.pojo,并创建实体类Users和一个Gender(Gender为枚举,指性别,它是Users的一个属性)以及Users的映射文件Users.hbm.xml。

Users 类:

package com.zhaoxuan.projectdemo.pojo;

public class Users {

private int id;

private String name;

private String pwd;

private Gender gender = Gender.男;

public Users(){}

public Users(String name, String pwd, Gender gender) {

this.name = name;

this.pwd = pwd;

this.gender = gender;

}

//------------------------get/set-----------------------------//

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public Gender getGender() {

return gender;

}

public void setGender(Gender gender) {

this.gender = gender;

}

}


Gender 类:

package com.zhaoxuan.projectdemo.pojo;

public enum Gender {

男,女;

}


Users.hbm.xml 映射文件:

<?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">

<hibernate-mapping package="com.zhaoxuan.projectdemo.pojo">

<class name="Users" table="Users">

<id name="id" column="id">

<generator class="native"/>

</id>

<property name="name" length="20" not-null="true" column="name"/>

<property name="pwd" length="20" not-null="true" column="pwd"/>

<property name="gender" length="5">

<type name="org.hibernate.type.EnumType">

<param name="enumClass">com.zhaoxuan.projectdemo.pojo.Gender</param>

<!--12为java.sql.Types.VARCHAR常量值,即保存枚举的字面值到数据库。如果不指定type参数,保存枚举的索引值(从0开始)到数据库-->

<param name="type">12</param>

</type>

</property>

</class>

</hibernate-mapping>


第四步:编写dao层代码,在src下创建包com.zhaoxuan.projectdemo.dao,在该包下创建接口UsersDao并创建的实现类UsersDaoImpl。

UsersDao 类:

package com.zhaoxuan.projectdemo.dao;

import java.util.List;

import com.zhaoxuan.projectdemo.pojo.Users;

public interface UsersDao {

public void save(Users users);

public void update(Users users);

public Users find(int id);

public void delete(int... ids);

public List<Users> list();

}

UsersDaoImpl 类:

package com.zhaoxuan.projectdemo.dao.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

import com.zhaoxuan.projectdemo.dao.UsersDao;

import com.zhaoxuan.projectdemo.pojo.Users;

@Repository

@Transactional

public class UsersDaoImpl implements UsersDao {

@Resource private SessionFactory sessionFactory ;

public void delete(int... ids) {

for(int id : ids){

sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Users.class, id));

}

}

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public Users find(int id) {

// TODO Auto-generated method stub

return (Users)sessionFactory.getCurrentSession().get(Users.class, id);

}

@SuppressWarnings("unchecked")

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public List<Users> list() {

return sessionFactory.getCurrentSession().createQuery("from Users").list();

}

public void save(Users users) {

sessionFactory.getCurrentSession().persist(users);

}

public void update(Users users) {

sessionFactory.getCurrentSession().merge(users);

}

}


第五步:编写service层代码,在src下创建包com.zhaoxuan.projectdemo.service,在该包下创建接口UsersService并创建的实现类UsersServiceImpl。

UsersService 类:

package com.zhaoxuan.projectdemo.service;

import java.util.List;

import com.zhaoxuan.projectdemo.pojo.Users;

public interface UsersService {

public void save(Users users);

public void update(Users users);

public Users find(int id);

public void delete(int... ids);

public List<Users> list();

}

UsersServiceImpl 类:

package com.zhaoxuan.projectdemo.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

import com.zhaoxuan.projectdemo.dao.UsersDao;

import com.zhaoxuan.projectdemo.pojo.Users;

import com.zhaoxuan.projectdemo.service.UsersService;

@Service

public class UsersServiceIpml implements UsersService {

@Resource private UsersDao usersDao;

public void delete(int... ids) {

usersDao.delete(ids);

}

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public Users find(int id) {

return usersDao.find(id);

}

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public List<Users> list() {

return usersDao.list();

}

public void save(Users users) {

usersDao.save(users);

}

public void update(Users users) {

usersDao.update(users);

}

}


第六步:通过以上五步,其实我们已经将Spring2.5和Hibernate3整合完毕了,但是为了验证,我们还得测试。在src下创建包com.zhaoxuan.projectdemo.junit,在该包下创建测试类UsersTest(注意加上Junit4[b]支持)。[/b]

UsersTest 类:

package com.zhaoxuan.projectdemo.junit;

import java.util.List;

import javax.annotation.Resource;

import org.junit.BeforeClass;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zhaoxuan.projectdemo.dao.UsersDao;

import com.zhaoxuan.projectdemo.pojo.Gender;

import com.zhaoxuan.projectdemo.pojo.Users;

import com.zhaoxuan.projectdemo.service.UsersService;

public class UsersTest {

@Resource private static UsersService usersService;

//

//  @BeforeClass

//  public static void setUpBeforeClass() throws Exception {

//

//  }

//

//  @Test

//  public void createDBTest(){

//      new ClassPathXmlApplicationContext("applicationContext.xml");

//  }

@BeforeClass

public static void setUpBeforeClass() throws Exception {

try {

ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");

usersService = (UsersService)act.getBean("usersServiceIpml");

} catch (RuntimeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void save(){

usersService.save(new Users("zhaoxuan", "zhaoxuan123",Gender.男));

usersService.save(new Users("123", "123",Gender.女));

usersService.save(new Users("aaa", "aaa",Gender.女));

}

@Test

public void find(){

Users users = usersService.find(1);

System.out.println("帐号:" + users.getName() + " 密码 :" + users.getPwd() + " 性别:" +users.getGender() );

}

@Test

public void list(){

List<Users> list = usersService.list();

for(Users users : list){

System.out.println("帐号:" + users.getName() + " 密码 :" + users.getPwd() + " 性别:" +users.getGender() );

}

}

@Test

public void update(){

Users users = usersService.find(6);

users.setGender(Gender.男);

usersService.update(users);

}

@Test

public void delete(){

usersService.delete(3);

}

}


测试效果



嘿嘿。。。好啦,效果出来了,CRUD能够正常操作,通过以上六步,我们已经完全将Spring2.5和Hibernate3整合完毕了,接下来就是在此基础上整合Struts2了

第一步:罗列出Struts2的必要Jar文件并加入到lib目录里:

Struts2 所需的Jar文件:



在这里我们顺便加入JSTL/EL表达式的Jar文件到lib里,因为我们页面上可能会用到...

JSTL/EL
所需的Jar文件:




第二步:修改编写Web.xml文件.

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<!--  指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找  -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<!-- 对Spring容器进行实例化 -->

<listener>

<listenerclass>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<filter>

<filter-name>struts2</filter-name>

<filterclass>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>


第三步:在src下创建struts2的配置文件struts.xml文件.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!-- 与Spring集成,指定由Spring负责Action对象的创建 -->

<constant name="struts.objectFactory" value="spring"></constant>

<!-- 默认的视图主题 -->

<constant name="struts.ui.theme" value="simple"></constant>

<package name="UsersAction" namespace="" extends="struts-default">

<action name="UsersAction_*" class="usersAction" method="{1}">

<result name="list">/page/users.jsp</result>

</action>

</package>

</struts>


第四步:在src下创建包com.zhaoxuan.projectdemo.action,并创建Action类UsersAction

package com.zhaoxuan.projectdemo.action;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import com.zhaoxuan.projectdemo.pojo.Users;

import com.zhaoxuan.projectdemo.service.UsersService;

@Controller

@Scope("prototype")

public class UsersAction {

private static final long serialVersionUID = 1L;

@Resource private UsersService usersService;    //Server层

private Users users;

public String list(){

ActionContext.getContext().put("users",usersService.list());

return "list";

}

//----------------get/set---------------------//

public Users getUsers() {

return users;

}

public void setUsers(Users users) {

this.users = users;

}

}


第五步:创建一个用户列表页面users.jsp,这里我用两种方式显示列表,ognl和jstl两种,但都要注意在页面头部加上他们的标签.

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>用户列表</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

</head>

<body>

ONGL:

<br/>

<br/>

<s:iterator value="#request.users">

<s:property value="id"/>,<s:property value="name"/>,<s:property value="pwd"/>,<s:property value="gender"/><br/>

</s:iterator>

<br/>

<br/>

JSTL/EL:

<br/>

<br/>

<c:forEach items="${users}" var="users">

${users.id },${users.name },${users.pwd },${users.gender }<br/>

</c:forEach>

<br/>

<br/>

</body>

</html>


好了,刷新项目,启动服务,接下来在浏览器地址栏中输入:



最后效果:



在此我们的整合就正式完毕并成功了,并附上项目的目录结构:



OK,谢谢大家的支持....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: