星空网 > 软件开发 > Java

SSH(Struts2+Spring+Hibernate)框架搭建流程

添加支持


 

我先介绍的是MyEclipse9的自带框架支持搭建过程:

首先我们来搭建一个Web项目:

SSH(Struts2+Spring+Hibernate)框架搭建流程

 

一、Hibernate(数据层)的搭建:

相关描述

Ⅰ.服务器与数据库之间的交互

Ⅱ. Hibernate封装了一系列的JDBC代码,提供相应的方法我们使用,使我们的开发变得简单快捷,效率大大提高

实现流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

二、Struts2(MVC)的搭建:

相关描述

Ⅰ.本质上相当于一个Servlet

Ⅱ.不需要手动获取传递参数 (只需要定义声明属性名和设置get、set的方法)、也不需要手动跳转(只需要struts.

Ⅲ.对项目的分包(例如:dao、service、entity等等),实现MVC模式的开发

Ⅳ.MVC: Action属于Model,而JSP是View页面的展示,其中过滤器起到了Controller的作用

实现流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

这里注意一点问题:

  Struts2与Hibernate在一起搭建,antlr包,有冲突。MyEclipse9中有这样问题。朋友的MyEclipse10中没有这个问题。

 SSH(Struts2+Spring+Hibernate)框架搭建流程SSH(Struts2+Spring+Hibernate)框架搭建流程

  我选择把Struts中antlr包去掉。

SSH(Struts2+Spring+Hibernate)框架搭建流程

 

三、Spring(注入实例)的使用:

相关描述

Ⅰ.每一层的代码之间的耦合改为模块(分离/解耦),代码之间互不影响

Ⅱ.不再关注具体的实现类的实例

Ⅲ.更换不同的技术(模块),不需要改动代码,只需要修改applicationContext.

Ⅳ.主要功能IOC(控制反转)松耦合、AOP (面向切面)内聚性

实现流程

 SSH(Struts2+Spring+Hibernate)框架搭建流程SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

 

 


 

 编辑web.

<??><web-app version="3.0" ="http://java.sun.com/  ="http://www.w3.org/2001/  xsi:schemaLocation="http://java.sun.com/>  <display-name></display-name>    <!-- 这是一只拦路虎 -->  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <!-- 读取applicationContext.-->  <context-param>    <param-name>contextConfigLocation</param-name>    <!-- 改变默认读取路径为src目录下的 applicationContext.-->    <param-value>classpath:applicationContext.</param-value>  </context-param>  <!-- 定义Spring** class: spring 3.0 Web Libraries 下可以找到。 -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>    <!-- Struts2过滤器 -->  <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></web-app>

 

DB Browser中反转实体类:

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

 

数据访问层dao接口

package com.dao;import com.entity.Users;/** * 用户接口 * @author asus * */public interface UsersDao {  /** 登陆验证 */  Users loginCheck(Users user);}

 

数据访问层dao.impl实现类

  1)继承HibernateDaoSupport类实现增删改查

package com.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.dao.UsersDao;import com.entity.Users;/** * 用户接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *一种方法:    Dao实现类继承HibernateDaoSupport类,该类是抽象类,    该类中有一个HibernateTemplate的属性,通过this.getHibernateTemplate()可获得一个HibernateTemplate类的模板对象。 */public class UsersDaoImpl extends HibernateDaoSupport implements UsersDao {    @Override  public Users loginCheck(Users user) {    //得到此类提供的模板实现增删改查    HibernateTemplate ht = this.getHibernateTemplate();        //得到一个集合    List<Users> list = ht.find("from Users where name=? and password=? ",user.getName(),user.getPassword());        //使用三元运算符,防止list.get(0)时报空指针。    return (Users) (list.size()>0?list.get(0):null);  }}  

 2)定义HibernateTemplate模板对象属性
package com.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.dao.UsersDao;import com.entity.Users;/** * 用户接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *第二种方法:  在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下: */public class UsersDaoImpl implements UsersDao {    //定义一个模板对象  HibernateTemplate hibernateTemplate;      @Override  public Users loginCheck(Users user) {        //得到一个集合    List<Users> list = hibernateTemplate.find("from Users where name=? and password=? ",user.getName(),user.getPassword());        //使用三元运算符,防止list.get(0)时报空指针。    return (Users) (list.size()>0?list.get(0):null);  }  //生成Get'Set方法  public HibernateTemplate getHibernateTemplate() {    return hibernateTemplate;  }  public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {    this.hibernateTemplate = hibernateTemplate;  }}

业务逻辑层接口service

package com.service;import com.entity.Users;/** * 用户业务逻辑层 * @author asus * */public interface UsersService {  /** 登陆验证 */  Users loginCheck(Users user);}

业务逻辑层接口实现类service.impl

package com.service.impl;import com.dao.UsersDao;import com.entity.Users;import com.service.UsersService;/** * 用户业务逻辑层实现类 * @author asus * */public class UsersServiceImpl implements UsersService {  //这里以前是new的,现在不需要了,交给Spring来实例  private UsersDao udd;  @Override  public Users loginCheck(Users user) {        return udd.loginCheck(user);  }  //生成Get'Set  public UsersDao getUdd() {    return udd;  }  public void setUdd(UsersDao udd) {    this.udd = udd;  }  }

控制器类Action

package com.action;import com.entity.Users;import com.opensymphony.xwork2.ActionSupport;import com.service.UsersService;/** * 用户控制器类 * @author asus * */public class UsersAction extends ActionSupport {  //接收页面的值  private Users user;  //一样交给Spring实例  private UsersService uss;  public String execute(){        return SUCCESS;  }  /** 判断用户输入的账号密码 */  public String login(){    if(user!=null){      Users checkResult = uss.loginCheck(user);      if(checkResult!=null){        return SUCCESS;      }    }        return LOGIN;  }  //生成Get'Set  public Users getUser() {    return user;  }  public void setUser(Users user) {    this.user = user;  }  public UsersService getUss() {    return uss;  }  public void setUss(UsersService uss) {    this.uss = uss;  }}

登陆页面

 <body>    <form action="loginUser.action" method="post" >      用户名:<input type="text" name="user.name" />      密码:  <input type="password" name="user.password" />      <input type="submit" value="登录按钮" >    </form> </body>

成功页面

 <body>    登录成功! </body>

 配置applicationContext.

<??><beans ="http://www.springframework.org/schema/beans"  ="http://www.w3.org/2001/ ="http://www.springframework.org/schema/p"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  <bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="configLocation" value="classpath:hibernate.cfg.>    </property>  </bean>    <!-- UsersBean配置 -->  <!-- 第一种方法:Dao实现类继承HibernateDaoSupport类的配置 -->  <bean id="userDaoImpl" class="com.dao.impl.UsersDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>  </bean>  <!-- 第二种方法:在dao类中定义一个模板对象  <bean id="hibernateTemplate" >    <property name="sessionFactory" ref="sessionFactory" ></property>  </bean>  <bean id="userDaoImpl" >    <property name="hibernateTemplate" ref="hibernateTemplate"></property>  </bean> -->     <bean id="userServiceImpl" class="com.service.impl.UsersServiceImpl">    <property name="udd" ref="userDaoImpl" />  </bean>  <bean id="userSturts" class="com.action.UsersAction">    <property name="uss" ref="userServiceImpl" />  </bean></beans>

配置Struts.

<??><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>  <package name="struts2" namespace="/" extends="struts-default">   <action name="*User" class="userSturts" method="{1}" >     <result name="success">/success.jsp</result>     <result name="login">/login.jsp</result>   </action>  </package></struts>  

end:基本的登陆现在已经做好,现在我们开始做添加事务。

添加事务


 

 数据访问层dao接口

package com.dao;import com.entity.District;/** * 区域接口 * @author asus * */public interface DistrictDao {  /** 添加区域 */  int addReg (District district);}

 数据访问层dao.impl实现类

   定义HibernateTemplate模板对象属性

package com.dao.impl;import org.springframework.dao.DataAccessException;import org.springframework.orm.hibernate3.HibernateTemplate;import com.dao.DistrictDao;import com.entity.District;/** * 区域接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *第二种方法:  在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下: */public class DistrictDaoImpl implements DistrictDao {  //定义一个模板对象  private HibernateTemplate hibernateTemplate;    @Override  public int addReg(District district) {    try {      hibernateTemplate.save(district);      return 1;    } catch (DataAccessException e) {      e.printStackTrace();    }    return 0;  }  //生成Get'Set方法  public HibernateTemplate getHibernateTemplate() {    return hibernateTemplate;  }  public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {    this.hibernateTemplate = hibernateTemplate;  }}

 

 业务逻辑层接口service

package com.service;import com.entity.District;/** * 地区业务逻辑类接口 * @author asus * */public interface DistrictService {  /**   * 配置事务的话注意方法的命名规范以什么开头。   * @param district   */  int addReg(District district);}

 

业务逻辑层接口实现类service.impl

 

package com.service.impl;import com.dao.DistrictDao;import com.entity.District;import com.service.DistrictService;/** * 区域业务逻辑层接口实现类 * * @author asus * */public class DistrictServiceImpl implements DistrictService {  //声明接口由Spring来实例  private DistrictDao ddd;    @Override  public int addReg(District district) {        return ddd.addReg(district);  }  //声明Get'Set方法  public DistrictDao getDdd() {    return ddd;  }  public void setDdd(DistrictDao ddd) {    this.ddd = ddd;  }  }

 

控制器类Action

package com.action;import com.entity.District;import com.opensymphony.xwork2.ActionSupport;import com.service.DistrictService;/** * 控制器类 * 作用:添加区域 * @author asus * */public class DistrictAction extends ActionSupport {  //属性  private District district;  private DistrictService dss;  //处理添加请求  public String add(){        int addReg = dss.addReg(district);        if(addReg>0){      return SUCCESS;    }    return "index";  }    //生成Get'Set方法  public DistrictService getDss() {    return dss;  }  public void setDss(DistrictService dss) {    this.dss = dss;  }  public District getDistrict() {    return district;  }  public void setDistrict(District district) {    this.district = district;  }  }

 

 添加页面

 <body>    <form action="addReg" method="post" >      <input type="text" name="district.name" >      <input type="submit" value="提交" >    </form> </body>

 

成功页面

 <body>    登录成功! </body>

 

配置applicationContext.

<??><!-- 配置事务第一步:需要导入的命名空间     命名规范:       xsi:架构实例       beans:根节点       aop:事务       context:注解       tx:事务管理       xsi:schemaLocation   协议(一个命名规范对应一个协议) 注:若不知道自己使用的框架版本,可以把协议后的版本号去掉,此处已经去掉。 --><beans ="http://www.springframework.org/schema/beans"  ="http://www.w3.org/2001/ ="http://www.springframework.org/schema/aop"  ="http://www.springframework.org/schema/context" ="http://www.springframework.org/schema/tx"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">    <bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="configLocation" value="classpath:hibernate.cfg.>    </property>  </bean>  <!-- 配置事务第二步:配置事务管理器,将SessionFactory注入 -->  <bean id="txManager"    class="org.springframework.orm.hibernate3.HibernateTransactionManager">    <property name="sessionFactory" ref="sessionFactory" />  </bean>  <!-- 配置事务第三步:事务通知      tx:method: 管理事务的方法      name:方法的名字是已什么开头的      no-rollback-for="true":回滚      read-only="true":只读(默认false,是已非事务的方式来操作你的数据,比如查询)      propagation:事务是以哪种方式来操作  REQUIRED:必填       (事务解释:比如一个方法中执行添加两张表的信息,第一个添加,没有事务开启一个事务,第二个添加加入第一个事务中,两个方法都成功则成功,一个失败全部回滚)            name="*" :不在以上方法名开头之内的,是以非事务的方式来操作         -->  <tx:advice id="txAdvice" transaction-manager="txManager">    <tx:attributes>      <tx:method name="get*" propagation="SUPPORTS" read-only="true" />       <tx:method name="add*" propagation="REQUIRED" />       <tx:method name="del*" propagation="REQUIRED"/>      <tx:method name="update*" propagation="REQUIRED"/>      <tx:method name="*" propagation="SUPPORTS" read-only="true" />    </tx:attributes>  </tx:advice>  <!-- 配置事务第四步:织入(以面相切面的方式编程) -->  <aop:config>    <!-- 切面       expression:表达式\        * com.service.impl.*.*(..):(星  空格  包名  点星(代表所有此包下所有的类)  点星(代表类下所有的方法)    括号点点(代表方法中不管带有几个参数,只要符合命名规范都纳入事务管理))     -->    <aop:pointcut id="serviceMethod" expression="execution(* com.service.impl.*.*(..))" />     <!-- 通知者          由切面和事务通知组成的通知者    -->    <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>  </aop:config>  <!-- UsersBean配置 -->  <!-- 第一种方法:Dao实现类继承HibernateDaoSupport类的配置 -->  <bean id="userDaoImpl" class="com.dao.impl.UsersDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>  </bean>  <!-- 第二种方法:在dao类中定义一个模板对象 <bean id="hibernateTemplate"     > <property name="sessionFactory" ref="sessionFactory" ></property> </bean>     <bean id="userDaoImpl" > <property name="hibernateTemplate"     ref="hibernateTemplate"></property> </bean> -->  <bean id="userServiceImpl" class="com.service.impl.UsersServiceImpl">    <property name="udd" ref="userDaoImpl" />  </bean>  <bean id="userSturts" class="com.action.UsersAction">    <property name="uss" ref="userServiceImpl" />  </bean>  <!-- DistrictBean配置 -->  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">    <property name="sessionFactory" ref="sessionFactory"></property>  </bean>  <bean id="DistrictDaoImpl" class="com.dao.impl.DistrictDaoImpl">    <property name="hibernateTemplate" ref="hibernateTemplate"></property>  </bean>  <bean id="DistrictServiceImpl" class="com.service.impl.DistrictServiceImpl">    <property name="ddd" ref="DistrictDaoImpl"></property>  </bean>  <bean id="DistrictAction" class="com.action.DistrictAction">    <property name="dss" ref="DistrictServiceImpl"></property>  </bean></beans>

 

end:暂时结束,还会更新applicationContext.

 




原标题:SSH(Struts2+Spring+Hibernate)框架搭建流程

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流