Struts2.1.6+Hibernate3.3.2+Spring2.5.5+Extjs3.0.0+Annotations方式快速开发框架
- 格式:doc
- 大小:751.50 KB
- 文档页数:37
Springside 3.3.2 技术参考手册1. 总述∙架构风格简述1.概述技术框架选型以工业化大规模软件开发为原则---主流的选型、适宜团队分工的架构,同时照顾轻量级快速开发的需求,Java版的约定大于配置的风格。
)在SpringSide的官方主页上,写着SpringSide 3 中包含的主流组件:Spring 2.5 + Hibernate 3 + Struts 2 + JSP 2.0 + JQuery + JAX-WS 2 (by Apache CXF 2) +SpringSecurity 2.0。
不过,如果你认为和SpringSide 2 相比,升级的只是版本号,那么你就大错特错了。
像我这样从SpringSide 2过来的人,如果能够详细对比SpringSide 2 和SpringSide 3,对于我们理解SpringSide 3肯定更加有帮助。
下面的内容是我自己的一些体会,不正确的地方欢迎大家指正。
从主要的架构来,依然是那么几层,先设计数据库,再写Entity层,再写Dao层,再写Action,然后使用JSP表现出来,其中的Entity和Dao层和Hibernate紧密相关,Action是Struts的主要部分,Spring作为粘合剂,把这些东西连在一起,并提供了一些机制简化编写这些层的工作。
SpringSide就是这样一个大的粘合体,省去了我们自己很多的粘合工作。
从SpringSide 2 到SpringSide 3,这些工作得到进一步的简化,我们开发起来就更爽了。
我认为,我们的开发模式,主要经历了这样的简化过程:第一阶段,代码加一大堆的配置文件第二阶段,代码加少量的配置文件第三阶段,代码加基本上等于零的配置文件这些进步是如何实现的呢?从第一阶段到第二阶段,主要靠的是Annotation,把一些大量的配置工作转移到了Java代码中,那么从第二阶段到第三阶段怎么实现呢?都已经Annotation了,你还有什么办法让配置文件更少?想不到吧!我也想不到,直到我看了SpringSide 3生成的项目,我才知道还有一个好东西叫自动扫描。
Struct2、Hibernate3、Spring3框架搭建实战采⽤⽬前最新的struts-2.3.1.2、hibernate3.6.10.Final、spring-framework-3.1.1.RELEASE开发包,以及eclipse-jee-indigo-SR2-win32、apache-tomcat-7.0.27服务器、JDK6和mysql5做开发环境,参考了前辈的⼀篇相关⽂章,改正了其中的错误和疏漏,克服了公司分配的“新”机器每⼩时⾃动重启三次的困难,终于把环境给搭好了。
整个过程中遵循的⼀个原则是,避免引⼊⽤不到的jar包,以求搭建⼀个最⼩的SSH 运⾏环境。
⾸先创建⼀个Dynamic web project 输⼊任意名字如SSHBase。
第⼀步:加载Spring环境我们需要引⼊的包有:org.springframework.asm-3.1.1.RELEASE.jarorg.springframework.beans-3.1.1.RELEASE.jarorg.springframework.context-3.1.1.RELEASE.jarorg.springframework.core-3.1.1.RELEASE.jarorg.springframework.expression-3.1.1.RELEASE.jarorg.springframework.jdbc-3.1.1.RELEASE.jarorg.springframework.web-3.1.1.RELEASE.jarorg.springframework.orm-3.1.1.RELEASE.jar由于spring默认开启了⽇志,还需要加⼊commons-logging的jar包,否则会报错。
建议不要⼀次性加⼊应该先加最核⼼的运⾏代码看缺少什么加什么,这样就不会加多余的包进来了,spring3已经把包按功能分开,不像以前⼀个包,这样更灵活,只要运⾏我们需要的功能,⽽没⽤到的就不⽤在硬性的添加进来。
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
Struts2+Spring3+hibernate3整合(2011年7月末,最新)上次下载了一个教程,上面写着:“献给我亲爱的老婆!”(羡慕不已)。
想了想,我没老婆,难道没什么好写了!不难…献给我暗恋过的每一个女人!(嘿嘿…)如果在你遇到的女生中有一个幽默豁达的女生,不要犹豫,追上去,就娶她了!一,需要的框架包二,建立project,添加相应的.jar文件(重点)1,eclipse中建立dynamic web project,这里是ssh_integrate_0100。
2,src中创建需要的类,这里以一个域模型为user的例子说明。
(现在建立这些类,可以方便我们在搭建时候随时测试!)User.javaIUserDao.javaUserDaoImpl.javaIUserService.javaUserServiceImpl.java3,拷贝spring-framework-3.1.0\dist目录下的所有jar包,注意有一个不是jar的文件,当然拷过去也没事。
4,拷贝spring运行中需要的其他jar文件,主要是mons-logging,可以从spring-framework-3.0.2.RELEASE-dependencies中找到。
ii.Aspectjrt.jar和aspect-waver.jar,可以从spring-framework-2.5.6-with-dependencies/lib/aspectj下面找到(不知道为什么,spring-framework-3.0.2.RELEASE-dependencies中没有aspectjrt的jar包)iii.aopalliance.Jar,apache-dbcp.jar,apache-pool.jar,可以从spring-framework-3.0.2.RELEASE-dependencies中找到。
5,建立beans.xml,这里使用的是annotation和component-scan,这样配置可以大大简化配置,所以是best-practice,其他配置请参考spring文档。
搭建SSH框架:Struts1.* + Spring2.5 + Hibernate3.0 一,项目结构:图(1)Jsp页面省略,主要是一些添删改查的页面;二,开始搭建项目环境,步骤如下:使用平台:MyEclipse6.0/6.5框架版本:Struts1.* + Spring2.5 + Hibernate3.0;1,添加过程:1>,新建项目: 打开MyEclipse,在Package Explorer视图下,右键单击New-> Web Project;注意:在新建项目时,JDK的版本最好要选择Java EE 5.0;因为版本过低,可能有些JSP方面的功能不支持;新建玩项目之后,把该导的包导入到下面,下图为SS H 框架所需要的Jar包,注意,该项目用的是ORACLE数据库;其中,activation与mail这两个包为Java发邮件的包;classes12为Oracle数据库的驱动包,如果不是Oracle数据库,可更换该Jar包;dwe为Ajax dwr 框架中的包;2>,接着就开始用MyEclipse辅助开发Struts,Spring,Hibernate了;3>,首先MyEclipse辅助开发Struts,方法:右键单击你所建的项目,出现一级菜单,选择Myeclipse,选择Myeclipse之后会出现二级菜单,接着选择Add Struts Capabilities;;接着具体操作如下面图示:点击Finish按钮完成;完成之后,可将包删除;在上图中,如果那个勾没有去掉的话,就会自动生产如下标签:当然,如果你觉得标签对你没什么用的话,可以删除;如果该勾去掉的话,就只生成标签,这是Struts的核心标签;4>,MyEclipse辅助开发Spring,方法跟上面的一样,选择Add Spring apabilities;;接着具体操作如下面图示:然后点击Next,具体操作如下图:接着点击 Finish按钮,完成此项操作;5>,,最后MyEclipse辅助开发Hibernate,在执行和上面类似方法之前,Hibernate 需要先做另外一件事情,那就是和数据建立连接,具体操作如下图:点击上图位置的或者右边的>> ,然后再选择MyEclipse Database Explorer切换到如下图页面:,然后右键单击,新建一个Database Driver;如下图:下面这个截图是该项目的数据库链接图:如图所示,测试数据库链接成功;然后可直接点击Finish完成;接着切换到窗口,按照上面第三小步的方法,选择Add Hibernate apabilities;;接着具体操作如下面图示:点击下一步:点击下一步:点击下一步:点击下一步:点击 Finish 完成;6>,最后一步,就是运用Hibernate的映射机制,把数据库的表与JAVA的对形成一个关系映射;在此之前,首先应该在项目SRC的目录下面新建一个包,如该项目所示,用来存放映射生成的POJO对象以及映射文件;如下图:有一点说一下,你生成的*.hbm.xml文件可能不止一个,对,你可以把它们整合到一个文件中;然后新建按第五小步的方法,把窗口切换到MyEclipse Database Explorer界面,然后打开右键刚才所建立的链接,选择属于你自己的用户;然后选择Tble;右键选择如上图的属性:接下来的操作如下图:点击 Next,进入下一步:点击 Next,进入下一步:至此,项目环境己经搭建完成;三,项目搭建完成,SSH各个部分配置文件的说明,以及它们之间存在的关系:1,首先是Struts的核心配置文件,即struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><!—建立Form表单,在此处进行登记 -→<form-bean name="userForm"type="erForm" /> </form-beans><global-exceptions /><global-forwards /><!—各个Action对应与之相对应的表单 -→<action-mappings><!-- 用户管理 --><action parameter="opers" attribute="userForm" name="userForm"path="/doUser" scope="request"><forward name="login_ok" path="/welcome.jsp"></forward><forward name="login_no" path="/index.jsp"></forward> </action></action-mappings><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProc essor"></controller><message-resourcesparameter="ermanagerview.struts.ApplicationResources"> </message-resources><!—Spring辅助Struts管理Struts-→<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/action-servlet.xml" /></plug-in></struts-config>2,其次就是Springd的applicationContext.xml文件和action-servlet.xml文件:applicationContext.xml文件:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd"><!-- Session 工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"value="classpath:hibernate.cfg.xml"><!-- 可以不要配置文件(hibernate.cfg.xml),直接写在这个Spring的配置文件中 --></property></bean><!-- 模板 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 事务器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManage r"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 对外代理 --><!-- 1,用户管理 --><bean id="userDaoImp"class="erDaoImp"><property name="hibernateTemplate" ref="hibernateTemplate" /> </bean><bean id="userServiceTarget"class="erServiceImp"> <property name="userdao"><ref local="userDaoImp" /></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean"><property name="transactionManager"><ref local="transactionManager" /></property><property name="target"><ref local="userServiceTarget" /></property><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean></beans>action-servlet.xml文件:<!—Spring辅助Struts管理Struts-<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean name="/doUser"class="erAction"scope="prototype"></bean></beans>3,最后就是Hibernate的hibernate.cfg..xml文件:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">wangxiaodong</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.2:1521:ALIZEEDB</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="myeclipse.connection.profile">Test</property><property name="connection.password">donny</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mappingresource="com/ygkq/usermanager/model/entity/User.hbm.xml" /></session-factory></hibernate-configuration>该文件基本上不用动,都是自动生成的代码;当然,你也可以根据自己的需要添加代码,例如,你想在执行HQL语句的时候让它显示SQL语句,可将<property name="hibernate.show_sql">true</property>插入代码中;另外在图(1)中还有两个配置文件没有提到,那就是log4j.properties 与mytag.tld;其中log4j.properties是配置日志信息的;而mytag.tld主一个自定义标签;四,SSH框架搭建完成:SSH框架基本搭建完成,如果有不对或者不妥之处,请随时指教!~E-mail:jerry8059@。
SSH2框架的搭建及与SSH1的差别介绍SSH2框架搭建版本:struts2.1.6 spring2.5.6hibernate3.3.1SSH2与SSH1之简要比较SSH框架的优势开发效率高适应客户的需求随机变化SSH1框架的劣势繁琐的配置文件编写struts1.X Action线程安全,仅允许一个实例去处理所有请求Forward过于繁琐对Servlet依赖过强SSH2与SSH1之简要比较SSH2优势大量简化配置文件编写。
更大程度解耦合Struts不再依赖Servlet通配符配置注解使用struts2使用struts2借鉴webwork的成功之处,兼容struts1,集合两者优点,更易于整合spring及hibernate框架。
所需jar包:struts2相关配置web.xml文件配置与struts1不同,struts2采用Filter进行配置filter-namestruts/filter-namefilter-class //.uts2.//.ter.StrutsPrepareAndExecuteFilter/filter-classfilter-mappingfilter-namestruts/filter-nameurl-pattern*.do/url-pattern/filter-ma ppingstruts2相关配置struts.xml文件配置在项目src目录下添加struts.xml配置文件。
其基本配置如下:?xml version"1.0" encoding"UTF-8" ?!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "////.package name"default" extends"struts-default"namespace""struts2相关配置struts.xml常用配置为简化配置文件编写,struts2提供通配符支持,如下:action name“*” class“com.demo.1Action”method“show”同时,struts2还支持*/*的配置模式,在配置文件中节点下配置如下:constantname"//.shesInActionNames"value"true"则以上配置可改写为:action name“*/*” class “com.demo.1Action”method“2”struts2相关配置struts.xml常用配置struts2默认访问后缀为.action,不符合访问习惯,且过于繁琐,可在标签下配置如下:constantname"//.ension"value"do"则可使用习惯的.do方式访问整合spring框架添加spring核心包及struts2-spring-plugin-2.1.6.jar。
用spring、Hibernate、Struts组建轻量级架构发布时间:2006.03.09 00:13 来源:CSDN 作者:轻量级J2EE架构版本0.1版权© 2005 成湘均文中肯定有错误和理解不正确的地方,欢迎给我指正。
我的邮箱:chengxiangjun@ -------------------------------------------------------------------------------- 目录前言1. 整体框架1.1. UI层1.2. 业务层1.3. 数据持久层1.4. 域对象层2. Struts2.1. 概述2.2. 快速入门2.3. ActionForm2.4. Action2.5. 客户端验证3. springFramework3.1. 概述3.2. 为什么使用Spring3.3. 快速入门3.4. 搭建Web应用环境3.5. Spring IOC3.6. Spring AOP4. hibernate4.1. 概述4.2. 为什么使用Hibernate4.3. 快速入门4.4. 工具的配合使用4.4.1. 生成影射文件4.4.2. 生成映射对象4.4.3. 根据映射对象生成映射文件4.5. 专用词4.5.1. cascade(级联)4.5.2. inverse(反转)4.5.3. Lazy Loading(延时装载)4.6. 一对一表关联操作4.7. 多对一表关联操作4.8. 一对多表关联操作4.9. 多对多表关联操作4.10. 与spring的结合使用4.11. Hibernate DAO5. log4j5.1. 概述5.2. 快速入门前言在java的应用领域,有许多成熟的开源软件,利用它们一样可以打造优越、灵巧的应用框架,本文首先将先介绍所要构建的系统结构和借助的开源产品。
然后逐一讲解各开源软件的具体运用。
希望本文能给那些正在学习这些开源软件的同行提供参考。
一、新建项目1.新建maven项目New ->project选择Maven projectnext在filter输入webapp选择maven-archetype-webappGroup id输入inscribe,artifact id输入farsighted二、添加struts2框架1.添加struts2支持项目上点右键->myeclipse->add struts capabilities点选struts2.1和/*只勾选struts2 core lib启动tomcat,在地址栏输入localhost:8088/farsighted出现如下界面2.添加action类New ->source folder输入src/main/javaNew ->classPackage输入org.inscribe.farsighted.action,name输入LoginActionLoginAction.javapackage org.inscribe.farsighted.action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result;import com.opensymphony.xwork2.ActionSupport;/*** @author steve frank**/@ParentPackage("struts-default")public class LoginAction extends ActionSupport {private String name;private String password;public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Action(value = "login", results = {@Result(name = INPUT, location = "/WEB-INF/content/fail.jsp"),@Result(name = SUCCESS, location = "/WEB-INF/content/success.jsp") }) public String execute() {if (name.equals("steve") && password.equals("123"))return SUCCESS;elsereturn INPUT;}}Index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title></head><body><s:form action="login"><s:textfield name="name" value="steve"></s:textfield><s:textfield name="password" value="123"></s:textfield><s:submit></s:submit></s:form></body></html>success.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'success.jsp' starting page</title></head><body><s:text name="password" /><hr /><s:property value="password" /></body></html>fail.jsp<body>登录失败,用户名或密码错误.</body>三、添加hibernate框架1.添加hibernate支持右键->myeclipse->add hibernate capabilities点选hibernate 3.3 勾选enable hibernate annotations support勾选hibernate 3.3 annotations&entity manager,hibernate 3.3 core lib,hibernate 3.3 advanced support lib点选copy checked library jars to folder and add to build-path点选newFolder :src/main/resources勾选open configuration file选择db driver:mysql去掉勾,不创建hibernatesessionfactory四、添加spring框架1.添加spring支持项目右键->myeclipse->add spring capabilities点选spring3.0勾选spring 3.0 core;spring 3.0 aop;spring3.0 persistence core; spring3.0 persistence jdbc; 勾选copy checked library contents to project folder采取默认,enable aop,new applicationcontext.xml不创建sessionfactory2.applicationContext.xml文件配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"> <bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBea n"><property name="configLocation" value="classpath:hibernate.cfg.xml"></property><property name="packagesToScan" value="org.inscribe.farsighted.model" /> </bean><!-- 使用annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入--><context:component-scan base-package="org.inscribe.farsighted" /><!-- 配置事务管理--><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 配置注解实现管理事务(cglib:proxy-target-class="true")--><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" /></beans>3.hibernate.cfg.xml修改<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/test</property><property name="ername">root</property><property name="connection.password">admin</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="myeclipse.connection.profile">MYSQL</property><!-- <mapping class="org.inscribe.farsighted.model.Student" /> --><!-- Connection Pooling Info --><property name="initialSize">5</property><property name="maxActive">100</property><property name="maxIdle">30</property><property name="maxWait">500</property><property name="defaultAutoCommit">false</property></session-factory></hibernate-configuration>4.web.xml文件配置<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class ></listener><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>Set Character Encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>Set Character Encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>五、类的添加1.hibernate反向生成students表右键->hibernate reverse engineering选择package : com.inscribe.farsighted.model勾选create pojo<>db->点选add hibernate mapping annotations to pojo;勾选update hibernate configuration with mapping resource location勾选java data access object(dao)->勾选generate precise findby methods;点选sping daoId generation :native2.添加service接口package org.inscribe.farsighted.service;import org.inscribe.farsighted.model.Student;public interface StudentService {public Student findById(Integer id);}3.添加service实现类package org.inscribe.farsighted.service.impl;import javax.annotation.Resource;import org.inscribe.farsighted.model.Student;import org.inscribe.farsighted.model.StudentDAO;import org.inscribe.farsighted.service.StudentService;import org.springframework.stereotype.Service;@Servicepublic class StudentServiceImpl implements StudentService {@Resourceprivate StudentDAO studentDAO;@Overridepublic Student findById(Integer id) {// TODO Auto-generated method stubreturn studentDAO.findById(id);}}4.添加测试类package org.inscribe.farsighted;import org.inscribe.farsighted.model.Student;import org.inscribe.farsighted.service.StudentService;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");StudentService service = (StudentService) context.getBean("studentServiceImpl");Student s=service.findById(1);System.out.println(s.getName());}}5.WEB-INF下新建Folder包结构如下6.修改输出目录Build path->configure build pathOut folder统一改default:Webapp/src/main/webapp/WEB-INF/classes更改如果无效,在pom.xml中<build>……</build>添加<sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>src/main/resources</directory></resource></resources><outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>7.添加struts-spring支持(action注解配置支持)Build path->add librariesMyeclipse libraries勾选struts 2 spring libraries8.修改struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.1//EN" "/dtds/struts-2.1.dtd"><struts><!-- 开启使用开发模式,详细错误提示--><constant name="struts.devMode" value="true" /><!-- 将对象交给spring管理--><constant name="struts.objectFactory" value="spring" /><!-- 指定资源编码类型--><constant name="struts.i18n.encoding" value="UTF-8" /><!-- 指定每次请求到达,重新加载资源文件--><constant name="struts.i18n.reload" value="true" /><!-- 指定每次配置文件更改后,自动重新加载--><constant name="struts.configuration.xml.reload" value="false" /><!-- 国际化资源文件--><constant name="struts.custom.i18n.resources" value="content/Language" /><!-- 浏览器缓存--><constant name="struts.serve.static.browserCache" value="false" /><!-- 默认后缀名--><constant name="struts.action.extension" value="do,action,jhtml,," /><!-- Struts Annotation --><constant name="actionPackages" value="com.frank.action" /> </struts>9.在LoginAction.java中添加调用StudentService@Resourceprivate StudentService studentService;测试Student s = studentService.findById(1);System.out.println(s.getName());10.success.jsp中添加<hr /> ${password}11.启动tomcat,地址栏输入http://localhost:8088/farsighted/点击submit效果如下包结构如下12.测试完成.。
Struts2+Spring3+Hibernate3 集成 目 录 1.Struts2集成 ..................................................... 11.1. 把Struts提供的jar包拷贝到/WEB-INF/lib/目录下 (1)1.2. 在web.xml中配置Struts的过滤器 (2)2.Struts2开发 ..................................................... 22.1 编写Struts Action程序,需要继承ActionSupport (2)2.2 创建struts.xml的Action映射文件 (3)3.Struts2+Spring集成 .............................................. 33.1 按第1步“Struts2集成”方法集成Struts2 (3)3.2 再把Struts的Spring插件把拷贝到/WEB-INF/lib/目录下 (3)3.3 把Spring提供的jar拷贝到/WEB-INF/lib/目录下 (3)3.4 web.xml配置Spring的过滤器 (3)3.5 创建applicationContext.xml配置文件 (4)4.Struts2+Spring+Hibernate集成 ..................................... 54.1 先按照“Struts2+Spring集成”方法执行 (5)4.2 导入Apache Commons几个jar包 (5)4.3 导入Hibernate几个jar包 (5)4.4 数据库的JDBC驱动 (5)4.5 在applicationContext.xml中加入如下的配置 (5)4.6 创建hibernate.cfg.xml文件 (6)5.Struts2+Spring+Hibernate开发 ..................................... 65.1 编写Model类 (6)5.2 编写Model类的HBM映射文件 (7)5.3 在applicationContext.xml中指定HBM映射文件路径 (8)5.4 编写DAO接口和实现类程序,并继承HibernateDaoSupport (8)5.5 在applicationContext.xml中配置DAO Bean (10)6.注意事项 ....................................................... 101. Struts2集成1.1.把Struts提供的jar包拷贝到/WEB-INF/lib/目录下Struts需要如下几个包:解压:struts-2.2.3.1-lib.zip需要:struts2-core-2.2.3.1.jarxwork-core-2.2.3.1.jarognl-3.0.1.jarfreemarker-2.3.16.jarjavassist-3.11.0.GA.jar和所有以“commons-”开头的包。
Hibernate3.3.2+Spring2.5.5+Struts2.1.6+Extjs3.0.0 Annotations方式快速开发框架(上)一、准备1. Hibernate:hibernate-distribution-3.3.2.GA, hibernate-annotations-3.4.0.GA2. Spring:spring-framework-2.5.5-with-dependencies.zip3. Struts2: struts-2.1.6-all.zip4. Extjs: ext-3.0.0.zip另外,数据库使用Oracle XE,开发工具使用eclipse-jee-galileo-SR1-win32,Web容器使用apache-tomcat-6.0.14。
二、数据库建表新建表空间DEMO,新建用户demo、密码demo。
在该表空间中建表HSSEA_DEMO和OBJECT_ID,OBJECT_ID 用于存储主键值。
CREATE TABLE HSSEA_DEMO (ID NUMBER(10) NOT NULL,CODE NVARCHAR2(200) NOT NULL,DESCRIPTION NVARCHAR2(200));ALTER TABLE HSSEA_DEMO ADD (CONSTRAINT HSSEA_DEMO_PKPRIMARY KEY(ID));CREATE TABLE OBJECT_ID(NAME VARCHAR2(255 BYTE) NOT NULL,VALUE NUMBER(10) NOT NULL);三、新建动态网站Project name : HSSEADemo。
Target runtime单击New...,弹出框选择Apache Tomcat v6.0,Next,Tomcat installation directory选择安装tomcat的根目录,Finish。
再一次Finish完成新建动态网站。
四、整合Hibernate、Spring复制以下jar包到项目WebContent\lib下hibernate-distribution-3.3.2.GA\hibernate3.jarhibernate-distribution-3.3.2.GA\lib\required目录下所有jar包hibernate-distribution-3.3.2.GA\lib\optional\c3p0\c3p0-0.9.1.jarhibernate-annotations-3.4.0.GA\hibernate-annotations.jarhibernate-annotations-3.4.0.GA\lib目录下的hibernate-commons-annotations.jar、ejb3-persistence.jar hibernate-annotations-3.4.0.GA\lib\test目录下log4j.jar、slf4j-log4j12.jarspring-framework-2.5.5\dist\spring.jarspring-framework-2.5.5\lib\aspectj下所有包其他还需引入包commons-logging-1.0.4.jar,ojdbc14.jar。
在项目Properties->Java Build Path->Libraries,Add JARs... 加入所有包。
增加基础服务抽象类,用以完成基本的增删改查操作package com.xy.service;import java.io.Serializable;import ng.reflect.ParameterizedType;import java.util.List;import java.util.Set;import javax.annotation.Resource;import org.apache.log4j.Logger;import org.hibernate.SessionFactory;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Order;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;/*** 增删改查分页等基本功能抽象类,使用hibernate做dao层* @param <T> entity类*/public abstract class BaseServiceForHibernate<T> extends HibernateDaoSupport{ static Logger logger = Logger.getLogger(BaseServiceForHibernate.class.getName());//为父类HibernateDaoSupport注入sessionFactory的值@Resource(name="sessionFactory")public void setSuperSessionFactory(SessionFactory sessionFactory){logger.debug("为父类HibernateDaoSupport注入sessionFactory的值["+sessionFactory+"]");super.setSessionFactory(sessionFactory);}private Class<T> entityClass;@SuppressWarnings("unchecked")public BaseServiceForHibernate(){entityClass =(Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];logger.debug("得到entity对象类实例["+entityClass+"]");}/*** 根据对象是否存在ID新增或更新记录* @param entity对象*/public void save(T o){logger.debug("保存数据,对象:"+o);super.getHibernateTemplate().saveOrUpdate(o);}/*** 根据主键删除记录* @param主键*/public void delete(Serializable id){logger.debug("根据主键删除数据,主键:"+id);super.getHibernateTemplate().delete(super.getHibernateTemplate().load(entityClass, id)); }/*** 根据条件查询记录* @param存储条件的容器* @return数据列表*/@SuppressWarnings("unchecked")public List<T> query(Set<Criterion> criterionSet){logger.debug("根据条件查询数据!条件数:"+criterionSet.size());DetachedCriteria detachedCriteria = DetachedCriteria.forClass(entityClass);for(Criterion o : criterionSet){detachedCriteria.add(o);}return super.getHibernateTemplate().findByCriteria(detachedCriteria);}/*** 根据条件查询记录* @param存储条件的容器* @param存储排序的容器* @return数据列表*/@SuppressWarnings("unchecked")public List<T> query(Set<Criterion> criterionSet, Set<Order> orderSet){logger.debug("根据条件和排序查询数据!条件数:"+criterionSet.size()+",排序数:"+orderSet.size());DetachedCriteria detachedCriteria = DetachedCriteria.forClass(entityClass);for(Criterion o : criterionSet){detachedCriteria.add(o);}for(Order o : orderSet){detachedCriteria.addOrder(o);}return super.getHibernateTemplate().findByCriteria(detachedCriteria);}/*** 根据条件分页查询记录* @param存储条件的容器* @param数据开始位置(第一条记录为0)* @param最大数据数* @return数据列表*/@SuppressWarnings("unchecked")public List<T> query(Set<Criterion> criterionSet, int firstResult, int maxResults){logger.debug("根据条件分页查询数据!条件数:"+criterionSet.size()+",记录开始序号:"+firstResult+",最大记录数:"+maxResults);DetachedCriteria detachedCriteria = DetachedCriteria.forClass(entityClass);for(Criterion o : criterionSet){detachedCriteria.add(o);}return super.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);}/*** 根据条件分页查询记录* @param存储条件的容器* @param存储排序的容器* @param数据开始位置(第一条记录为0)* @param最大数据数* @return数据列表*/@SuppressWarnings("unchecked")public List<T> query(Set<Criterion> criterionSet, Set<Order> orderSet, int firstResult, int maxResults ){logger.debug("根据条件和排序分页查询数据!条件数:"+criterionSet.size()+",排序数:"+orderSet.size()+",记录开始序号:"+firstResult+",最大记录数:"+maxResults);DetachedCriteria detachedCriteria = DetachedCriteria.forClass(entityClass);for(Criterion o : criterionSet){detachedCriteria.add(o);}for(Order o : orderSet){detachedCriteria.addOrder(o);}return super.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);}/*** 根据条件取得记录总数[性能严重问题,需改]* @param存储条件的容器* @return记录总数*/public int totalSize(Set<Criterion> criterionSet){logger.debug("根据条件取记录总数!条件数:"+criterionSet.size());List<T> list = query(criterionSet);return list!=null?list.size():0;}/*** 根据主键取得数据* @param主键* @return entity对象*/@SuppressWarnings("unchecked")public T get(Serializable id){logger.debug("根据主键删除数据,主键:"+id);return (T)super.getHibernateTemplate().get(entityClass, id);}}增加Demo实体类package com.xy.entity.demo;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.SequenceGenerator;import javax.persistence.Table;import javax.persistence.TableGenerator;@Entity@Table(name="HSSEA_DEMO")public class Demo {@Id@GeneratedValue(strategy=GenerationType.TABLE, generator="hssea_demo")@TableGenerator(name = "hssea_demo",table="OBJECT_ID",pkColumnName="NAME",valueColumnName="VALUE",pkColumnValue="HSSEA_DEMO_PK",initialValue=1,allocationSize=1)@SequenceGenerator(name="hssea_demo_seq", sequenceName="seq_hssea_demo", allocationSize= 1)private long id;@Column(name="CODE")private String code;@Column(name="DESCRIPTION")private String description;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}增加DemoService类package com.xy.service.demo;import java.util.HashSet;import java.util.List;import java.util.Set;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Restrictions;import org.springframework.stereotype.Service;import com.xy.entity.demo.Demo;import com.xy.service.BaseServiceForHibernate;@Service("demoService")public class DemoService extends BaseServiceForHibernate<Demo> { /*** 根据code取对象* @param code* @return*/public Demo get(String code){Set<Criterion> set = new HashSet<Criterion>();set.add(Restrictions.eq("code", code));List<Demo> list = super.query(set);if(list!=null&&list.size()>0){return list.get(0);}else{return null;}}}DemoService中只需关注特殊业务,基本增删改查已由BaseServiceForHibernate完成。