基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框

1.新建一个动态web工程添加jar包

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架_第1张图片

2.在com.digital.entity包下创建实体类UserInfo与数据中digital数据表user_Info对应 创建映射UserInfo.hbm.xml



<hibernate-mapping package="com.digital.entity">
    <class name="UserInfo" table="user_info" catalog="digital">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native">generator>
        id>
        <property name="userName" type="java.lang.String">
            <column name="userName" length="16" not-null="true" />
        property>
        <property name="password" type="java.lang.String">
            <column name="password" length="16" not-null="true" />
        property>
    class>
hibernate-mapping>

使用Annotation完成UserInfo实体类与数据表的映射关系

@Entity
@Table(name = "user_info", catalog = "digital")
public class UserInfo {

对类中的属性进行映射 -主键属性

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public int getId() {

对非主属性

    @Column(name = "userName", length = 16)
    public String getUserName() {
        return userName;

使用注解类后,就不在需要UserInfo.hbx.xml映射文件删除

—————————————————————————————————————————————————————————

3.Spring整合hibernate

目的

  • -由Spring的IOC容器来管理Hibernate的SessionFactory
  • 让Hibernate使用Spring的声明式事务

实现:

  • 在src文件下创建Spring配置文件applicationContextxml
  • 基于xml配置数据源dataSource
  • 配置hibernate的sessionFactory实例
  • 声明hibernate事务管理器、定义事务通知、定义切面、将事务通知和切面组合起来

    —————————————————————————————————————————————————————————

4.配置applicationContext.xml文件

  • 先加入头部声明文件、命名空间

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架_第2张图片

并且将各个命名空间关联到项目里

  • 加入c3p0数据源(实例化数据源)

    <bean id="dataSource"  
        class="com.mchange.v2.c3p0.ComboPooledDataSource">  
        <property name="driverClass" value="com.mysql.jdbc.Driver" />  
        <property name="jdbcUrl" value="jdbc:mysql:///digital" />  
        <property name="user" value="root" />  
        <property name="password" value="123456" />   
        <property name="minPoolSize" value="5" />  
        <property name="maxPoolSize" value="10" />
    bean>  

配置Hibernate的SessionFactory(引用ref bean注入数据源dataSource、设置Hibernate基本属性,配置方言mysql,实例化SessionFactory)

  • 在jar文件中寻找class的类文件

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架_第3张图片

  • 定义SessionFactory 的id Bean从jar包内引用类orm.hibernate5.LocalSessionFactoryBean配置hibernate的SessionFactory实例
  • applicationcontext文件中为SessionFactory中name=“dataSource”属性注入数据源、
  • 为SeesionFactory中基本属性name=“hibernateProperties”配置Hibernate基本属性方言
    
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        
        <property name="dataSource">
            <ref bean="dataSource" />
        property>
        
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                prop>
            props>
        property>
  • 配置Hibernate的映射文件的位置名称(引用注入UserInfo.hbx.xml)
    
        <property name="mappingResources">
            <list>
                <value>com/digital/entity/UserInfo.hbm.xmlvalue>
            list>
        property>
    bean>
  • 定义Hibernate事务管理器Bean(为TransactionManager事务管理器属性name=“SessionFactory”引用ref= SessionFactory实例,注入事务管理器中)

    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    bean>

声明式事务管理也有两种常用的方式

  • 基于tx和aop名字空间的xml配置文件
  • 基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。

基于annotation的配置(后面在applicacontext文件中添加的内容都删除)

  • 开启注释处理器
    
    <context:annotation-config />

  • 基于@Transactional注解方式的事务管理

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

  • 开启自动扫描机制检查与管理Bean实例
<tx:annotation-driven transaction-manager="transactionManager" />

简单的介绍事务的规则(传播行为)
常用required

Required
Support
Never

事务的管理主要任务:创建回滚提交事务 是否需要创建事务及如何创建事务有事务的传播行为控制

—————————————————————————————————————————————————————————


基于tx和aop名字空间的xml配置文件

  • 定义数据通知,事务管理(将事务通知交给事务管理器处理,指定事务传播规则)
     
    <tx:advice id="txAdvice" transaction-manager="transactionManager">   
      
      <tx:attributes>
        
        <tx:method name="*" propagation="REQUIRED" /> 
      tx:attributes>
    tx:advice>

  • 定义切面,并将事务通知和切面组合(定义那些方法应用那些规则)
  
    <aop:config>
        
        <aop:pointcut id="serviceMethods" expression="execution(* com.digital.service.*.*(..))" /> 
         
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /> 
    aop:config>

—————————————————————————————————————————————————————————

5.DAO层的开发

public interface UserInfoDAO {
    public List search(UserInfo cond);


}

  • 调用注入的Session,进行增删改查数据库操作

public class UserInfoDAOImpl implements UserInfoDAO {

    SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
  • 定义UserInfoDAOImpl类的Bean并且类中的属性name=sessionFactory 注入实例ref=SessionFactory
  
    <bean id="userInfoDAO" class="com.digital.dao.impl.UserInfoDAOImpl">      
        <property name="sessionFactory" ref="sessionFactory" />
    bean>
  • 使用注解@Repository(”userInfoDAO”)在Spring容器中注册一个userInfoDAO实例
@Repository("userInfoDAO")
public class UserInfoDAOImpl implements UserInfoDAO {
  • 使用注解@Autowired完成SessionFactory属性的注入
// 通过@Autowired注解注入Spring容器中的SessionFactory实例
    @Autowired
    SessionFactory sessionFactory;

—————————————————————————————————————————————————————————

6.Service层的开发

  • UserInfoService类
public interface UserInfoService {
    public List login(UserInfo cond);
}
  • 在UserInfoServiceImpl中userInfoDAO属性对象注入UserInfoDAO对象实例
public class UserInfoServiceImpl implements UserInfoService {

    UserInfoDAO userInfoDAO;    
    public void setUserInfoDAO(UserInfoDAO userInfoDAO) {
        this.userInfoDAO = userInfoDAO;
    }
  • 定义Bean为在UserInfoServiceImpl类中的属性name=”userInfoDAO“注入ref=“userInfoDAO”实例
    
    <bean id="userInfoService" class="com.digital.service.impl.UserInfoServiceImpl">      
        <property name="userInfoDAO" ref="userInfoDAO" />
    bean>
  • 使用@Service注解:在Service服务层实例化UserInfoServiceImpl类放入Spring容器中
@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {
  • 使用@Transactional实现事务管理(通过注解@Transactional的不同参数满足事务的不用事务要求)
//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {
  • 使用@Autowired实现userInfoDAO的实例注入
//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {

    //使用@Autowired注解注入UserInfoDAOImpl实例
    @Autowired
    UserInfoDAO userInfoDAO;    

—————————————————————————————————————————————————————————

7.Action层的开发

public class UserInfoAction extends ActionSupport {

    UserInfo ui;

    public UserInfo getUi() {
        return ui;
    }

    public void setUi(UserInfo ui) {
        this.ui = ui;
    }

    UserInfoService userInfoService;

    public void setUserInfoService(UserInfoService userInfoService) {
        this.userInfoService = userInfoService;
    }

    public String doLogin() throws Exception {
        List uiList = userInfoService.login(ui);
        if (uiList.size() > 0) {
            // 登录成功,转发到到index.jsp
            return "index";
        } else {
            // 登录失败,重定向到login.jsp
            return "login";
        }

    }
  • 在Spring配置文件中配置Action实例(在UsuerInfoAction类中属性userInfoService需要注入实例,设置原型模式scope=“prototype”每一个请求都注入新的
  
    <bean name="uiAction" class="com.digital.action.UserInfoAction" scope="prototype">
        <property name="userInfoService" ref="userInfoService" />
    bean>

  • 在项目stc中目录创建struts2的配置文件struts.xml
  • class=“uiAction”为页面提交的action提交到Spring 中的方法uiAction,并注入Bean实例
  • method=“doLogin”为页面提交的action提交到UserInfoAction类中doLogin方法响应
<struts>
    <constant name="struts.i18n.encoding" value="utf-8">constant>
    
    <package name="digital" namespace="/" extends="struts-default">
    
        <action name="doLogin" class="uiAction" method="doLogin">

  • 为UserInfoAction类doLogin方法返回的结果响应到指定跳转的页面

            <result name="index" type="dispatcher">index.jspresult>
            <result name="login" type="redirect">login.jspresult>
        action>
    package>
struts> 
  • 使用@controller:在容器中对UserInfoAction类实例化 使用
  • @scope(”prototype”):指定原型模式
//使用@Controller注解在Spring容器中注册UserInfoAction实例
//使用@Scope("prototype")指定原型模式
@Controller
@Scope("prototype")
public class UserInfoAction extends ActionSupport {

    UserInfo ui;

使用@Autowired:对userInfoService注入实例化对象

// 使用@Autowired注解注入UserInfoServiceImpl实例
    @Autowired
    UserInfoService userInfoService;
  • 使用@Action注解:ACTION中下的一个方法doLogin方法,通过改变value值响应多个不同的URL.
  • @Result中name值根据不同的type值 跳转到不同的location本地页面
@Action(value=”/doLogin”,results={
   @Result(name=”index”,type=”dispatcher”,location=”/index.jsp”),
   @Result(name=”login”,type=”redirect”,location=”/login.jsp”)})
   public String doLogin()throws Exception
        {
        List uiList = userInfoService.login(ui);
            if(uiList.size()>0)
            {
                return "index";

            }
            else
                return "login"; 
        }

—————————————————————————————————————————————————————————

8.Spring整合Struts2

目的:

  • 使用SpringIOC容器管理Struts2的Action

步骤:

  • 在web.xml配置文件中制定以Lisetener的方式启动Spring,
    并配置Struts2的StrutsPrepareAndExecuteFilter

实现步骤

  • 指定Listerner方式启动Spring

    监听类的导入
    基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架_第4张图片


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
  • 指定Spring的上下文配置文件applicationContext

    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:applicationContext.xmlparam-value>
    context-param>
  • 配置struts2的核心控制器

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架_第5张图片

<filter>
        <filter-name>struts2filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
    filter>
    <filter-mapping>
        <filter-name>struts2filter-name>
        /*
    filter-mapping>
  • 整个web.xml文件配置

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>digital-1display-name>
    <welcome-file-list>
        <welcome-file>index.htmlwelcome-file>
        <welcome-file>index.htmwelcome-file>
        <welcome-file>index.jspwelcome-file>
        <welcome-file>default.htmlwelcome-file>
        <welcome-file>default.htmwelcome-file>
        <welcome-file>default.jspwelcome-file>
    welcome-file-list>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
    
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:applicationContext.xmlparam-value>
    context-param>
    <filter>
        <filter-name>struts2filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
    filter>
    <filter-mapping>
        <filter-name>struts2filter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>
web-app>

—————————————————————————————————————————————————————————

9.Struts文件配置 头部声明



  • Anction访问的Spring的bean实例(class=uiAction),完成Action类里面属性的配置
<struts>
    <constant name="struts.i18n.encoding" value="utf-8">constant>
    
    <package name="digital" namespace="/" extends="struts-default">
        
        <action name="doLogin" class="uiAction" method="doLogin">
            <result name="index" type="dispatcher">index.jspresult>
            <result name="login" type="redirect">login.jspresult>
        action>
    package>
struts>    
  • 基于annotation配置修改struts配置文件
    因为使用@anction注解已经完成上述内容,所以struts配置文件中上述内容不需要可以删除
@Action(value=”/doLogin”,results={ 
@Result(name=”index”,type=”dispatcher”,location=”/index.jsp”), 
@Result(name=”login”,type=”redirect”,location=”/login.jsp”)})

你可能感兴趣的:(SSH框架)