本文介绍  
1.Struts2+Spring2.5+Hibernate3.3的整合 
2.采用单元测试 
3.加入了lob类型的操作配置 
4.介绍oralce驱动 本文采用oracle11g 
5.在HIbernate中采用“枚举”设置映射关系

jar的下载: 
Struts2:   http://struts.apache.org/download.cgi#struts2013 
Hibernate: http://www.hibernate.org/  点击Hibernate Core 下载 
Spring:    http://www.springsource.org/download

Oracle的驱动介绍

Java代码  
  1. class12.jar(jdk 1.2 / 1.3 )
  2. class14.jar(jdk 1.4 / 1.5)
  3. 其实只要安装了oracle 就不用下载驱动包了,在安装程序中就有D:\app\Admin\product\11.1.0\db_1\jdbc\lib 这个目录下 根据使用的jdk 选择对应的驱动包就可以了。(例如: ojdbc6.jar)

SSH2整合需要的Jar 
1.Strusts

Java代码  
  1. javassist-3.4.GA.jar
  2. commons-fileupload-1.2.1.jar
  3. commons-logging-1.0.4.jar
  4. freemarker-2.3.15.jar
  5. ognl-2.7.3.jar
  6. struts2-core-2.1.8.jar
  7. xwork-core-2.1.6.jar
  8. struts2-spring-plugin-2.1.8.jar

2.Hibernate

Java代码  
  1. commons-collections-3.1.jar
  2. dom4j-1.6.1.jar
  3. ehcache-1.2.3.jar
  4. ejb3-persistence.jar
  5. hibernate-annotations.jar
  6. hibernate-cglib-repack-2.1_3.jar
  7. hibernate-commons-annotations.jar
  8. hibernate-entitymanager.jar //为了使用 枚举 类型的映射 这个包
  9. hibernate3.jar
  10. javassist-3.4.GA.jar
  11. jta-1.1.jar
  12. log4j.jar
  13. slf4j-api-1.5.2.jar
  14. slf4j-log4j12.jar

3.Spring

Java代码  
  1. aspectjrt.jar
  2. aspectjweaver.jar
  3. c3p0-0.9.1.2.jar
  4. cglib-nodep-2.1_3.jar
  5. common-annotations.jar
  6. log4j-1.2.15.jar
  7. spring.jar

整合步骤先整合 Spring2.5+Hibernate3.3 成功后在整合 Struts2 这样就不容易报错,而且 报错误后也便于找出问题。

spring配置文件模版可以到 spring自带的一些例子中进行拷贝。

applicationContext.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns="http://www.springframework.org/schema/beans"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  12. http://www.springframework.org/schema/aop
  13. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  14. http://www.springframework.org/schema/tx
  15. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  16. <!-- 采用扫描 + 注解的方式进行开发 可以提高开发效率,后期维护变的困难了,可读性变差了 -->
  17. <context:component-scan base-package="com.sh"/>
  18. <!-- 采用c3p0数据源 这个是在企业中用的比较多的一个数据源 -->
  19. <!-- destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 -->
  20. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  21. <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
  22. <property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
  23. <property name="user" value="luob"/>
  24. <property name="password" value="m123"/>
  25. <!-- 连接池中的最大连接数 -->
  26. <property name="maxPoolSize" value="150"/>
  27. <!-- 连接池中的最小连接数 -->
  28. <property name="minPoolSize" value="1"></property>
  29. <!-- 初始化连接池中的 连接数,取值 在  minPoolSize 和 maxPoolSize 之间,default:3-->
  30. <property name="initialPoolSize" value="3"/>
  31. <!-- 最大空闲时间,60s内该连接没有被使用则被丢弃,若为0 永不丢弃.default:0 -->
  32. <property name="maxIdleTime" value="60"/>
  33. <!-- 当连接数不够时,每次同时创建多少个连接 -->
  34. <property name="acquireIncrement" value="1"/>
  35. <!-- 每60s检查连接池中的所有空间连接,如果没有被使用,就被放弃, default:0 -->
  36. <property name="idleConnectionTestPeriod" value="60"/>
  37. </bean>
  38. <!--从c3p0数据源中抽取出JDBC的代理对象-->
  39. <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor"  lazy-init="true" />
  40. <!--9i: org.springframework.jdbc.support.lob.OracleLobHandler  -->
  41. <!--10g以后:org.springframework.jdbc.support.lob.DefaultLobHandler(mysql,DB2等都可以用这个)  -->
  42. <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
  43. <!-- 9i: 指定操作lob类型数据的jdbc代理对象 如果上面的 lobHandler 换了下面的就不需要了 -->
  44. <property name="nativeJdbcExtractor">
  45. <ref local="nativeJdbcExtractor" />
  46. </property>
  47. </bean>
  48. <!-- 将Hibernate中的事物交给Spring进行接管 -->
  49. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  50. <!-- 指定sessiongFactory中的数据源 -->
  51. <property name="dataSource" ref="dataSource"/>
  52. <!-- 指定hibernate的属性  -->
  53. <property name="hibernateProperties">
  54. <value>
  55. <!-- hibernate使用的 方言 -->
  56. hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
  57. <!-- 根据实体的映射文件生成表结构 -->
  58. hibernate.hbm2ddl.auto=update
  59. <!-- 格式化sql -->
  60. hibernate.format_sql=false
  61. <!-- 是否打印出sql语句 -->
  62. hibernate.show_sql=false
  63. </value>
  64. </property>
  65. <!-- 定义lob操作对象 -->
  66. <property name="lobHandler">
  67. <ref bean="lobHandler" />
  68. </property>
  69. <!-- 指定hibernate的映射文件 -->
  70. <property name="mappingResources">
  71. <list>
  72. <value>com/sh/employee/model/Employee.hbm.xml</value>
  73. </list>
  74. </property>
  75. </bean>
  76. <!-- 配置使用基于Hibernate的事务管理器 -->
  77. <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  78. <!-- spring需要通过sessionFactory来开启事务 -->
  79. <property name="sessionFactory" ref="sessionFactory"/>
  80. </bean>
  81. <!--Spring中的事物配置声明.1 基于xml 配置方式 2.基于注解来声明那些类-->
  82. <tx:annotation-driven transaction-manager="txManager"/>
  83. </beans>

Employee.java

Java代码  
  1. package com.sh.employee.model;
  2. public class Employee {
  3. private String username;
  4. private String password;
  5. //枚举类型
  6. private Gender gender=Gender.MAN;
  7. public String getUsername() {
  8. return username;
  9. }
  10. public void setUsername(String username) {
  11. this.username = username;
  12. }
  13. public String getPassword() {
  14. return password;
  15. }
  16. public void setPassword(String password) {
  17. this.password = password;
  18. }
  19. public Gender getGender() {
  20. return gender;
  21. }
  22. public void setGender(Gender gender) {
  23. this.gender = gender;
  24. }
  25. public Employee(String username, String password) {
  26. super();
  27. this.username = username;
  28. this.password = password;
  29. }
  30. public Employee() {
  31. super();
  32. // TODO Auto-generated constructor stub
  33. }
  34. public Employee(String username, String password, Gender gender) {
  35. super();
  36. this.username = username;
  37. this.password = password;
  38. this.gender = gender;
  39. }
  40. }

Gender.java

Java代码  
  1. package com.sh.employee.model;
  2. public enum Gender {
  3. //分为字面值 :MAN   /  WOMAN
  4. //索引值:0 1
  5. MAN,WOMAN
  6. }

Employee.hbm.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.sh.employee.model">
  6. <class name="Employee">
  7. <id name="username" length="20"/>
  8. <property name="password" length="20" not-null="true"/>
  9. <property name="gender" not-null="true" length="5">
  10. <type name="org.hibernate.type.EnumType">
  11. <param name="enumClass">com.sh.employee.model.Gender</param>
  12. <!--type:12 为java.sql.Types.VARCHAR常量值,即保存枚举字面值到数据库。
  13. 如果不指定(删除)type:则保存枚举索引值到数据库(从0 开始) -->
  14. <param name="type">12</param>
  15. </type>
  16. </property>
  17. </class>
  18. </hibernate-mapping>

web.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <!-- 如果有多个文件 使用 "," 分开 -->
  11. <param-value>classpath:applicationContext.xml</param-value>
  12. </context-param>
  13. <!-- 对spring容器进行实例化 -->
  14. <listener>
  15. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  16. </listener>
  17. <!--配置Struts2的过滤器 -->
  18. <filter>
  19. <filter-name>struts2</filter-name>
  20. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  21. </filter>
  22. <filter-mapping>
  23. <filter-name>struts2</filter-name>
  24. <url-pattern>/*</url-pattern>
  25. </filter-mapping>
  26. <welcome-file-list>
  27. <welcome-file>index.jsp</welcome-file>
  28. </welcome-file-list>
  29. </web-app>

EmployeeService.java

Java代码  
  1. package com.sh.employee.interfaces;
  2. import java.util.List;
  3. import com.sh.employee.model.Employee;
  4. public interface EmployeeService {
  5. void save(Employee employee);
  6. void update(Employee employee);
  7. Employee find(String userName);
  8. void delete(String... userName);
  9. List<Employee> list();
  10. }

EmployeeServiceBean.java

Java代码  
  1. package com.sh.employee.service;
  2. import java.util.List;
  3. import javax.annotation.Resource;
  4. import org.hibernate.Session;
  5. import org.hibernate.SessionFactory;
  6. import org.hibernate.Transaction;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Propagation;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import com.sh.employee.interfaces.EmployeeService;
  11. import com.sh.employee.model.Employee;
  12. /**
  13. *@author LuoB.
  14. */
  15. //@Service: 定义业务层。采用扫描加注解  将这个类交给spring管理 。
  16. //-----此时 在spring容器中默认的bean的名称为 这个类的简单类名 employeeServiceBean
  17. //@Transactional:定义这个类采用事物管理。这样所有的方法都有事物特性了。
  18. //-----如果某个方法不需要事物 采用这个标识:@Transactional(propagation=Propagation.NOT_SUPPORTED)
  19. @Service @Transactional
  20. public class EmployeeServiceBean implements EmployeeService {
  21. //采用注解方式注入SessionFactory
  22. //factory.openSession(); 表示开启一个新的session,这样就不能使用spring的事物管理了
  23. //spring的事物管理一般是先获取当前的session,然后 将这个begin。
  24. //factory.getCurrentSession();【在Hibernate3.0后才提供的这样的一个方法】得到 spring事物管理创建好的session
  25. @Resource SessionFactory factory;
  26. public void delete(String... userName) {
  27. //中间的load 替换了 get方法  因为速度和效率 比get 高
  28. for (String string : userName) {
  29. factory.getCurrentSession().delete(factory.getCurrentSession().load(Employee.class, string));
  30. }
  31. }
  32. @Transactional(propagation=Propagation.NOT_SUPPORTED)
  33. public Employee find(String userName) {
  34. // TODO Auto-generated method stub
  35. return (Employee)factory.getCurrentSession().get(Employee.class, userName);
  36. }
  37. @SuppressWarnings("unchecked")
  38. public List<Employee> list() {
  39. //Hql 进行查询
  40. /*Session session=factory.openSession();
  41. Transaction ts= session.beginTransaction();
  42. ts.commit();
  43. ts.rollback();*/
  44. return factory.getCurrentSession().createQuery("from Employee").list();
  45. }
  46. public void save(Employee employee) {
  47. //持久化方法 -内部还是调用save方法
  48. factory.getCurrentSession().persist(employee);
  49. }
  50. public void update(Employee employee) {
  51. // merge对update更新了有 save和update的功能
  52. factory.getCurrentSession().merge(employee);
  53. }
  54. }

EmployeeAction.java

Java代码  
  1. package com.sh.employee.action;
  2. import javax.annotation.Resource;
  3. import org.springframework.stereotype.Controller;
  4. import com.opensymphony.xwork2.ActionContext;
  5. import com.sh.employee.interfaces.EmployeeService;
  6. //@Controller 标识这个action为spring中的一个控制层,在spring中为类的简单类名
  7. @Controller
  8. public class EmployeeAction {
  9. @Resource EmployeeService employeeService;
  10. public String execute(){
  11. ActionContext.getContext().put("employees",employeeService.list());
  12. return "list";
  13. }
  14. }

EmployeeManageAction.java

Java代码  
  1. package com.sh.employee.action;
  2. import javax.annotation.Resource;
  3. import org.springframework.context.annotation.Scope;
  4. import org.springframework.stereotype.Controller;
  5. import com.opensymphony.xwork2.ActionContext;
  6. import com.sh.employee.interfaces.EmployeeService;
  7. import com.sh.employee.model.Employee;
  8. //因为Struts2在每次接受到请求后,会迅速的创建actionContext,ValueStack,action
  9. //然后把Action存在在ValueStack中 所以Action可以被OGNL访问.
  10. //但是把Action交给Spring管理后,action 就是单利模式了,这样 就违背了Struts2的设计理念。
  11. //所以 我们需要 将action 声明为 原型 @Scope("prototype")
  12. @Controller @Scope("prototype")
  13. public class EmployeeManageAction {
  14. @Resource EmployeeService employeeService;
  15. //如果 某个action 不声明为原型(比如: EmployeeAction) 千万不要在该action中 保存用户提交过来的数据
  16. //比如下面 如果是但单利模式 所有的请求都可以访问这个对象了
  17. private Employee employee;
  18. public Employee getEmployee() {
  19. return employee;
  20. }
  21. public void setEmployee(Employee employee) {
  22. this.employee = employee;
  23. }
  24. public String addUI(){
  25. return "add";
  26. }
  27. public String add(){
  28. employeeService.save(employee);
  29. ActionContext.getContext().put("msg", "保存成功!");
  30. return "message";
  31. }
  32. }

struts.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <!-- 设置struts的对象工厂,由spring进行创建 (更换Struts2的工厂)-->
  7. <!-- 实际上这个常量不配置也可以,如果项目中使用了struts2-spring-plugin-2.1.8.jar 那么可以不用配置
  8. 如果使用了其他的第三方plugin,建议明确配置struts2的对象工厂 -->
  9. <constant name="struts.objectFactory" value="spring"/>
  10. <package name="employee" namespace="/employee" extends="struts-default">
  11. <!-- 此时action开始由spring进行创建和管理,因此不用写上action的类名。
  12. 需要写上action在spring中的简单类名 -->
  13. <!-- http://localhost:8080/SSH2/employee/list.action -->
  14. <action name="list" class="employeeAction">
  15. <result name="list">/WEB-INF/page/employee.jsp</result>
  16. </action>
  17. <!-- http://localhost:8080/SSH2/employee/manage_addUI.action -->
  18. <action name="manage_*" class="employeeManageAction" method="{1}">
  19. <result name="add">/WEB-INF/page/employeeAdd.jsp</result>
  20. <result name="message">/WEB-INF/page/message.jsp</result>
  21. </action>
  22. </package>
  23. </struts>

employee.jsp

Html代码  
  1. <body>
  2. 采用OGNL表达式获取<br/>
  3. <s:iterator value="#request.employees">
  4. <s:property value="username"/>,<s:property value="password"/>,<s:property value="gender"/><br/>
  5. </s:iterator>
  6. <br/>采用JSTL/EL表达式获取<br/>
  7. <c:forEach var="emp" items="${employees}" varStatus="st">
  8. ${emp.username},${emp.password},${gender}<br/>
  9. </c:forEach>
  10. [url=<s:url action=]">员工添加[/url]
  11. </body>

employeeAdd.jsp

Html代码  
  1. <body>
  2. <s:form action="manage_add" namespace="/employee" method="post" theme="simple">
  3. 用户名:<s:textfield name="employee.username"/><br/>
  4. 密码:<s:textfield name="employee.password"/><br/>
  5. 性别:<s:radio list="#{'MAN':'男','WOMEN':'女'}" listKey="key" listValue="value" name="employee.gender"/><br/>
  6. <s:submit value="保存"/>
  7. </s:form>
  8. </body>

message.jsp

Html代码  
  1. <body>
  2. <h1><font color="red">${msg}</font></h1>
  3. [url=${pageContext.request.contextPath}/employee/list.action]返回员工列表[/url]
  4. </body>

spring+struts2+hibernate整合相关推荐

  1. java ee ssh三大框架知识点_详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)...

    详解JAVAEE--SSH三大框架整合(spring+struts2+hibernate) 发布时间:2020-09-17 13:34:05 来源:脚本之家 阅读:64 作者:kent鹏 一.整合原理 ...

  2. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  3. spring和hibernate整合的几种方式详细介绍

    Spring与Hibernate整合 Spring与Hibernate整合关键点: 1) Hibernate的SessionFactory对象交给Spring创建: 2) hibernate事务交给s ...

  4. Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题

    近期在知乎看到一句话,保持学习的有一种是你看到了很多其它的牛人,不甘心,真的不甘心. Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现: org.apache.jaspe ...

  5. jsp管理系统页面模板_jsp+ssh(spring+struts2+hibernate)+mysql实现的高校实验室管理系统...

    今天给大家演示的是一款由 jsp+ssh(spring+struts2+hibernate)+mysql实现的 高校实验室管理系统 本系统后端采用ssh框架, 前端采用bootstrap和layui框 ...

  6. spring+springmvc+hibernate 整合

    三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...

  7. 基于SSH(Spring+Struts2+Hibernate)开发健身俱乐部会员管理系统

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者需要毕业设计项目,大作业指导,购买付费源码等,欢迎指教: 企鹅:869192208 文章目录 一.开发背景 二. 需求分析 ...

  8. 总结xml配置spring-aop声明式事务配置与hibernate报错:** isno active spring和hibernate整合,原因会话工厂去路(到spring不仅仅是bean)错误

    spring事务管理太厉害了!!可以不再自管事务开发了! spring aop声明式事务配置 问题: 困扰我近十多天的的spring事务管理终于解决了, 再也不用自己管理事务了 嗯,可以删该死的hib ...

  9. mysql5.7 hibenate5.1_5.7 Spring与Hibernate整合应用

    下面以一个简单的实例说明Spring与Hibernate的整合策略,步骤如下. 1 在SQL Server 2005中创建数据库表 数据库名为XSCJ,表见附录A的登录表. 2 创建Web项目 命名为 ...

最新文章

  1. “”开天眼“”,天地分割效果
  2. 如何用pip指令将python包安装到虚拟环境中
  3. docker sonarqube 7.7 sonar-scanner-4.6.2 maven 安装、搭建+实战
  4. 区块如何防篡改_深入浅出:一条数据是如何完成上链的
  5. 自定义控件(视图)2期笔记03:自定义控件之使用系统控件(优酷案例之广告条Viewpager)...
  6. Java基础学习总结(112)——JUnit 5最新概况
  7. rk3399_android7.1调试lsm9ds1三合一sensor记录
  8. 做出产品不难,做好产品必须高手
  9. 如何解决xp进系统的时候需要按enter键
  10. android10LTE,Jelly 2:全球最小的Android 10 4G智能手机
  11. 保存3dmax场景很慢/卡
  12. 第二周博客作业西北师范大学|李晓婷
  13. CTF新手抓包找flag
  14. 如果你35岁恐慌了,那你真的该反思自己了···
  15. PXIe,PXI,CPCI相互区别和关系,总线之间,几种机箱之间是否兼容?
  16. 瑞星微RK3288开发板
  17. 苏嵌//张福辉//2018.7.23
  18. 乐视网复牌即跌停,仍有千万买单甘作“接盘侠”
  19. EBS中 EXCEL 格式报表输出的公用API
  20. 如何用知识星球年入50万

热门文章

  1. Three.js旋转到某个角度模型消失的问题
  2. bootstrap按钮下拉菜单
  3. HTML:a、button、input三种标签下的图片按钮
  4. 《设计模式》桥接模式
  5. 2023陕西省赛wp
  6. define在C语言中用法
  7. CSS控制网站去色全灰效果如何展现?
  8. winform访问被拒绝_详解C#对路径...的访问被拒绝解决过程
  9. docker 2375
  10. 2618: [Cqoi2006]凸多边形