struts2+spring+hibernate整合步骤

 

引用struts2、hibernate、spring所需jar包 

 

struts-core-2.x.x.jar  ----struts核心包 

xwork-core-2.x.x.jar   -----身体ruts在其撒很难过构建 

ognl-2.6.x.jar     ----对象导航语言 

freemarker-2.3.x.jar   ------struts2的ui标签的模板使用 

commons-fileupload-1.2.x.jar    ----文件上传组件 2.1.6版本后需加入此文件 

struts-spring-plugin-2.x.x.jar   ---用于struts2继承spring的插件 

 

hibernate核心安装包下的(下载路径:http://www.hibernate.org/ ,点击Hibernate Core 右边的download) 

hibernate2.jar 

lib\bytecode\hibernate-cglib-repack-2.1_3.jar 

lib\required\*.jar 

hibernate安装包下的(下载路径:http://www.hibernate.org/;点击Hibernate Annotations 右边的下载) 

hibernate-annotations.jar 

lib\ejb3-persistence.jar、hibernate-commons-annotations.jar 

hibernate针对JPA的实现包(下载路径:http://www.hibernate.org/ ,点击Hibernate Entitymanager右边下载)

 hibernate-entitymanager.jar 

lib\test\log4j.jar、  slf4j-log4j12.jar 

 

spring安装包下的 

dist\spring.jar 

lib\c3p0\c3p0-0.9.1.2.jar 

lib\aspecti\aspectjweaver.jar 

aspectjrt.jar 

lib\colib\cglib-nodep-2.1_3.jar 

lib\j2ee\common-annotations.jar 

vlib\log4j\log4j-1.2.15.jar 

lib\jakarta-commons\commons_loggin.jar 

 

数据库驱动包 

 

引用

创建mysql数据库ssh 设置编码为utf-8 语句: 

create database ssh character set 'utf8' collate 'utf8_general_ci' 

 

引用

1.先整合spring和hibernate 

  *将spring和hibernate的jar包放入lib下; 

  *创建spring的beans.xml配置文件 

 

 

 

配置bean.xml

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

2.<beans xmlns="http://www.springframework.org/schema/beans"

3. xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

4. xmlns:aop
="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

5. xsi:schemaLocation
="http://www.springframework.org/schema/beans

6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

7. http://www.springframework.org/schema/context

8. http://www.springframework.org/schema/context/spring-context-2.5.xsd

9. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>

11.

12. <!-- 将bean交由spring管理可以 用<bean></bean>和扫描加注 -->

13. <!--

14. 扫描该包及该包下的子包

15.
-->

16. <context:component-scan base-package="com.yss"></context:component-scan>

17.

18.

19. <!-- 集成hibernate sessionFactory单例模式 线程安全 创建耗内存-->

20. <!-- 将hibernate的事务也交由spring管理 -->

21. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

22. destroy-method
="close">

23. <property name="driverClass" value="org.gjt.mm.mysql.Driver" />

24. <property name="jdbcUrl"

25. value
="jdbc:mysql://localhost:3306/ssh?useUnicode=true&amp;characterEncoding=UTF-8" />

26. <property name="user" value="root" />

27. <property name="password" value="root" />

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

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

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

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

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

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

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

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

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

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

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

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

40. </bean>

41.

42. <bean id="sessionFactory"

43. class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

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

45. <property name="mappingResources"><!-- 放置hibernate的配置文件 -->

46. <list>

47. <value>com/yss/bean/Employee.hbm.xml</value>

48. </list>

49. </property>

50. <property name="hibernateProperties">

51. <value>

52. hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

53. hibernate.hbm2ddl.auto=update

54. hibernate.show_sql=true

55. hibernate.format_sql=false

56. </value>

57. </property>

58. </bean>

59.

60. <!--hibernate事务管理器配置-->

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

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

63. </bean>

64.

65. <!--spring可以用xml和注解来配置事务 声明 -->

66. <tx:annotation-driven transaction-manager="transactionManager"/>

67.</beans>

 

   *配置hibernate的model.hbm.xml和创建model类 

   *创建service 

 

EmployeeService .java: 

public interface EmployeeService { 

public boolean save(Employee employee);

public boolean update(Employee employee);

public Employee find(String username);

public boolean delete(String... username);//表示可变参数

public List<Employee> findAll();

}



 

service实现类 EmployeeServiceBean .java: 

import java.util.List; 

import javax.annotation.Resource;


import org.apache.log4j.Logger;

import org.hibernate.SessionFactory;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;



import com.yss.bean.Employee;
import com.yss.service.EmployeeService;



/**

*
@author qing 默认bean名称 employeeServiceBean

*@Service @Transactional 注入service和开启事务
*/
@Service

@Transactional

public class EmployeeServiceBean implements EmployeeService {

private static Logger logger = Logger.getLogger(Employee.class);
/**

* 注入sessionFactory

*/

@Resource SessionFactory factory;


public boolean delete(String... usernames) {

try {

for (String username : usernames) {
factory.getCurrentSession().delete(

factory.getCurrentSession().load(Employee.class,

username));

}

} catch (Exception e) {

logger.error(e.getMessage());

return false;

}

return true;

}



/*

* (non-Javadoc)

*

* @see com.yss.service.EmployeeService#find(com.yss.bean.Employee)
* 此标注表示不需要事务处理

*/

@Transactional(propagation = Propagation.NOT_SUPPORTED)

public Employee find(String username) {

return (Employee) factory.getCurrentSession().get(Employee.class,
username);

}



@SuppressWarnings("unchecked")

@Transactional(propagation = Propagation.NOT_SUPPORTED)

public List<Employee> findAll() {

return factory.getCurrentSession().createQuery("from Employee emp")
.list();

}


public boolean save(Employee employee) {

try {

factory.getCurrentSession().persist(employee);// .save(employee);//

// 获取已经开好的Session

} catch (Exception e) {

logger.error(e.getMessage());

return false;
}
return true;

}



public boolean update(Employee employee) {

try {
factory.getCurrentSession().merge(employee);// 类似于saveOrUpdate()方法

} catch (Exception e) {

logger.error(e.getMessage());

return false;

}

return true;

}



}


 

 

 *新建测试类   EmployeeTest.java

Java代码

1.public class EmployeeTest { 

2. private static EmployeeService employeeService;

3.

4. @BeforeClass

5. public static void setUpBeforeClass() throws Exception {

6. try {

7. ApplicationContext context = new ClassPathXmlApplicationContext(

8. "beans.xml");

9. employeeService = (EmployeeService) context

10. .getBean("employeeServiceBean");

11. } catch (Exception e) {

12. System.out.println(e.getMessage());

13. }

14. }
15.

16. @Test

17. public void createTable() {

18. //new ClassPathXmlApplicationContext("beans.xml");

19. };

20.

21. @Test

22. public void save() {

23. boolean result=employeeService.save(new Employee("long","long"));

24. if (result) {

25. System.out.println("保存成功。。。。。");

26. }else{

27. System.out.println("保存出错....");

28. }

29. };

30.

31. @Test

32. public void delete() {

33. boolean result=employeeService.delete("long");

34. if (result) {

35. System.out.println("删除成功。。。。。");

36. }else{

37. System.out.println("删除出错....");

38. }

39. };

40.

41. @Test

42. public void update() {

43. boolean result=employeeService.update((new Employee("qing","long")));

44. if (result) {

45. System.out.println("更新成功。。。。。");

46. }else{

47. System.out.println("更新出错....");

48. }

49. };

50.

51. @Test

52. public void findAll() {

53. List<Employee> elist=employeeService.findAll();

54. Iterator itor=elist.iterator();

55. while(itor.hasNext()){

56. Employee emp=(Employee)itor.next();

57. System.out.println(emp.getPassword());

58. }

59. };

60.

61. @Test

62. public void find(){

63. Employee employee=employeeService.find("qing");

64. System.out.println(employee.getPassword());

65. }

66.}

 

 *ok  没问题spring和hibernate整合完毕 

 *再将struts2所需包加入lib中 

 *创建struts.xml配置文件 

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

2.<!DOCTYPE struts PUBLIC

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

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

5.<struts>

6. <!-- 将struts的action交由spring管理 不在由struts的工厂介入 -->

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

8.

9. <package name="employee" namespace="/employee" extends="struts-default">

10. <action name="list" class="employeeAction">

11. <result name="success">

12. /WEB-INF/feapp/employee.jsp

13. </result>

14. </action>

15.

16. <action name="manager_*" class="employeeManagerAction" method="{1}">

17. <result name="success">

18. /WEB-INF/feapp/employeeadd.jsp

19. </result>

20. <result name="message">

21. /WEB-INF/feapp/result.jsp

22. </result>

23. </action>

24. </package>

25.</struts>


*在web.xml中加入 

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

2.<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

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

4. xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee

5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>

6.

7. <!--

8. 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找

9.
-->

10. <context-param>

11. <param-name>contextConfigLocation</param-name>

12. <param-value>classpath:beans.xml</param-value><!-- 多个配置文件的写法 classpath:beans1.xml,classpath:beans2.xml,classpath:beans3.xml -->

13. </context-param>

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

15. <listener>

16. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

17. </listener>

18.

19. <!-- struts2 的监听器 -->

20. <filter>

21. <filter-name>struts2</filter-name>

22. <filter-class>

23. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

24. </filter>

25. <filter-mapping>

26. <filter-name>struts2</filter-name>

27. <url-pattern>/*</url-pattern>

28. </filter-mapping>

29.

30. <welcome-file-list>

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

32. </welcome-file-list>

33.</web-app>



*创建相关jsp和action  

1.@Controller  @Scope("prototype")  

2.public class EmployeeManagerAction extends ActionSupport {

3. @Resource EmployeeService employeeService;

4. private Employee employee;

5.

6. public String addUI(){

7. //System.out.println("user come");

8. return SUCCESS;

9. }

10.

11. public String add(){

12. //System.out.println("--------------");

13. boolean result=employeeService.save(employee);

14. //ActionContext.getContext().put("genders", Gender.values());

15. if(result){

16. ActionContext.getContext().put("message", "保存成功!");

17. }else{

18. ActionContext.getContext().put("message", "保存失败!");

19. }

20. return "message";

21. }

22.

23. public Employee getEmployee() {

24. return employee;

25. }

26.

27. public void setEmployee(Employee employee) {

28. this.employee = employee;

29. }

30.}



 

 

posted @ 2012-04-07 19:28  死靈天使  阅读(652)  评论(0编辑  收藏  举报