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

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

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

这里写图片描述

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

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<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文件

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

这里写图片描述

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

  • 加入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的类文件

这里写图片描述

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

    <!-- 声明Hibernate事务管理器 -->
    <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注解方式的事务管理
<!-- 开启Spring的Bean自动扫描机制来检查与管理Bean实例 -->
    <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>
        <!-- 对所有方法应用REQUIRED事务规则 -->
        <tx:method name="*" propagation="REQUIRED" /> 
      </tx:attributes>
    </tx:advice>

  • 定义切面,并将事务通知和切面组合(定义那些方法应用那些规则)
  <!--定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则) -->
    <aop:config>
        <!-- 对com.digital.service包下的所有类的所有方法都应用事务规则 -->
        <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<UserInfo> 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
  <!-- 定义com.digital.dao.impl.UserInfoDAOImpl类-->
    <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<UserInfo> 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”实例
    <!-- 定义UserInfoServiceImpl类,并为其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<UserInfo> uiList = userInfoService.login(ui);
        if (uiList.size() > 0) {
            // 登录成功,转发到到index.jsp
            return "index";
        } else {
            // 登录失败,重定向到login.jsp
            return "login";
        }

    }
  • 在Spring配置文件中配置Action实例(在UsuerInfoAction类中属性userInfoService需要注入实例,设置原型模式scope=“prototype”每一个请求都注入新的
  <!-- 定义UserInfoAction类 ,并为其中属性userInfoService注入值 -->
    <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>
    <!-- 定义一个名称为digital的包,继承struts 2的默认包,指定命名空间为"/" -->
    <package name="digital" namespace="/" extends="struts-default">
    <!-- 为类中的方法配置映射 -->
        <action name="doLogin" class="uiAction" method="doLogin">

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

            <result name="index" type="dispatcher">index.jsp</result>
            <result name="login" type="redirect">login.jsp</result>
        </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<UserInfo> 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

    监听类的导入
    这里写图片描述

<!-- 指定以Listerner方式启动Spring -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  • 指定Spring的上下文配置文件applicationContext
<!-- 指定Spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
  • 配置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.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<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-1</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <!-- 指定以Listerner方式启动Spring -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 指定Spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <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>

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

9.Struts文件配置 头部声明

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
  • Anction访问的Spring的bean实例(class=uiAction),完成Action类里面属性的配置
<struts>
    <constant name="struts.i18n.encoding" value="utf-8"></constant>
    <!-- 定义一个名称为digital的包,继承struts 2的默认包struts-default,指定命名空间为"/" -->
    <package name="digital" namespace="/" extends="struts-default">
        <!-- 为类中的方法配置映射 -->
        <action name="doLogin" class="uiAction" method="doLogin">
            <result name="index" type="dispatcher">index.jsp</result>
            <result name="login" type="redirect">login.jsp</result>
        </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”)})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值