zoukankan      html  css  js  c++  java
  • Spring2.5+Hibernate3.3的集成

    框架集成

    先整合Spring2.5+Hibernate3.3

    hibernate核心安装包下的(下载路径:http://www.hibernate.org/)点击 "hibernate Core"右边的Downloads
    hibernate3.jar
    lib\bvtecode\colib\hibernate-cglib-repack-2.1_3.jar
    lib\required\*.jar

    hibernate 注解安装包下的(下载路径:www.hibernate.org,点击"Hibernate Annotations"右边的"Downloads")
    hibernate-annotations.jar
    lib\ejb3-persistence.jar hibernate-commons-annotations.jar

    Hibernate针对JPA的实现包(下载路径:www.hibernate.org,点击"Hibernate Entitvmanaoer"右边的"DownLoads")
    hibernate-entitymanager.jar
    lib\test\log4j.jar、slf4j-log4j12.jar

    Spring安装包下的
    dist\spring.jar
    lib\c3p0\c3p0-0.9.1.2.jar lib\aspecti\aspectjweaver.jar、aspectjrt.jar、lib\colib\cglib-nodep-2.1_3.jar
    \lib\j2ee\common-annotations.jar  lib\log4j-1.2.15.jar
    lib\jakarta-commons\commons-logging.jar

    新建WEB项目
    拷贝 hibernate的jar包 Spring的jar包 到WEB-INF的lib下MySql的数据库驱动类也要拷贝进
    提供spring配置文件 新建New-->XML文件 通常取名beans.xml
    拷贝spring的配置模板在例子、参考手册上拷贝

    配置和hibernate集成  bean交给spring管理之外 还可以扫描加注解方式来做
    <bean></bean>

    /***扫描加注解****/

    <context:component-scan base-package="cn.itcast"/>代表要扫描的包 会扫描包下的类包括子包下
    把Hibernate集成到Spring
    <sessionFactory>单例模式?因为这个对象的创建过程很耗线程
    hibernate的事务管理也要交给spring管理


    /***数据源***/

    <bean id="dataSource" class="com.mchange.v2.c3po.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="org.gjt.mm.mysql.Driver">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8"/> 注意:&在xml中转义&amp
    <property name="user" value="root"/>
    <property name="password" value="123456"/>
    <!--初始化是获取的连接数,取值应在minPoolSize与maxPoolSize之间 Default:3-->
    <property name="initialPoolSize" value="1"/>
    <!--连接池中保留的最小连接数。Default:15-->
    <property name="minPoolSize" value="1"/>
    <!--连接池中保留的最大连接数。Default:15-->
    <property name="maxPoolSize" value="300"/>
    <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则不丢弃。Default:0-->
    <property name="maxIdleTime" value="60"/>
    <!--当连接池中的连接耗尽的时候c3po一次同时获取的连接-->
    <property name="acquireIncrement" value="5"/>
    <!--每60秒检查所有连接池中的空闲连接 Default:0-->
    <property name="idleConnectionTestPeriod" value="60"/>
    </bean>
    /***数据源配置***/

    集成SessionFactory
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 接管hibernate事务管理
      <property name="dataSource" ref="dataSource"/> /***数据源***/
       <property name="mappingResources">
           <list>
           <value>cn/itcast/bean/Employee.hbm.xml</value> /****hibernate的映射文件***/ 需要制定
           </list>
     </property>
        <property name="hibernateProperties">
             <value>
            hibernate.dialect=org.hibernate.dialect.MySql5Dialect    /***方言MySQL***/
            hibernate.hbm2ddl.auto=update    /***映射文件生成表结构***/
            hibernate.show_sql=false 
            hibernate.format_sql=false
            </value>
        </property>
    </bean>


    第三步使用Spring容器管理事务服务:
    /***底层需要Session.begins...开始事务***/
    <bean id="txtManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
         <property name="sessionFactory" ref="sessionFactory"/> 需要SessionFactory获取Session所以要注入
    </bean>


    Spring的配置声明哪几种方式: 有两种
    1:基于注解的方式 纯Action方式注解
    2:xml的方式 配置那些类需要事务
    采用注解定义事务比xml灵活一些,采用注解会带来高度耦合
    采用基于注解的方式
    <!--使用基于注解方式配置事务-->
    <tx:annotation-driven Transaction-manager="txManager"/> 这个属性事务管理器注入进去 仅起到标注配置的作用有解析类


    提出简单的业务需求:
    实现员工的列表/添加功能
    首先设置员工的实体

    public class Empolyee{
         private String username;
         private String password;
         paivate Gender gender=Gender.Man


         //生成Get和Set方法
         配置实体的映射数据 有两种方式:一种xml配置方式 另一种是注解方式
         xml的好处 不会带有很强的侵入性    注解方式的缺点是带有很强的侵入性优点是开发速度快效率快
         新添加属性还是要修改源代码和xml文件

         使用原始的xml文件配置映射数据
    }

    public enum Gender{
       MAN,
       WOMEN;
    }

    Employee.hbm.xml


    配置模板拷贝

    <hibernate-mapping package="cn.itcast.bean">
      <class name="Employee" table=""> 实体类 对应的表
        <id name="username" length="20"/>
          <property name="password" length="20" not-null="true"/>
            <property name="gender" not-null="true" length="5"> 枚举类型
               <type name="org.hibernate.type.EnumType">
                  <param name="enumClass">cn.itcast.bean.Gender</param>
    <!--12为java.sql.Types.VARCHAR常量值,即保存枚举的字面值到数据库。如果不指定type参数,保存枚举的索引值(从0开始)到数据库-->
                  </param name="type">12</param> 要映射的数据类型 默认不提供参数会映射Int类型到数据库
               </type>
          </property>
      </class>
    </hibernate-mapping>

    如何校验这段配置是否成功~


    @Service @Transactional


    @Resource SessionFactory factory;

    ==============================================

    struts2-core-2.x.x.jar:Struts框架的核心类库
    Xwork-core-2.x.x.jar :XWork类库,Sturts2在其上构建
    ognl-2.6.x.jar对象导航语言,Struts2框架通过其读写对象的属性
    commons-fileupload-1.2.x.jar文件上传组件,2.1.6版本后需要加入此文件


    web.xml

    <!--指定spring的配置文件,默认从WEB根目录寻找配置文件,我们可以通过spring提供的classPath:前缀指定从类路径下寻找-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans.xml</param-value>
    </context-param>

    <!--对Spring容器进行实例化-->
    <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.StrutsPrepareAndExecuterFilter</filter-class>
    </filter>
    <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
    </filter-mapping>

    struts.xml

    <struts>
        <constant name="struts.objectFactory" value="spring"/> 使用spring的Bean工厂的名称
        <package name="employee" namespace="/employee" extends="struts-default">
            <action name="list" class="cn.itcast.action.Employee">  从spring中获取action bean的名称
            </action>
        </package>
    </struts>

    创建Action
    package cn.itcast.action;

    import org.springframework.stereotype.Controller;

    @Controller 注解 表示交给Spring管理
    public class EmployeeAction {
             @Resource EmployeeService employeeService; //注解把业务beng注进来
             public String execute(){
                 ActionContext.getContext().put("employee",employeeService.list());
                 return "list";
          }
    }


    迭代展示页面
    <body>
    ONGL:
    <br/>
    <s:iterator value="#request.employee">
    <s:property value="username"/>,<s:property value="password"/>,<s:property  value="gender"/>
    </s:iterator>


    <br/>

    /***加入JSTL的jar包 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>***/
    JSTL/EL:
    <c:forEach items="${employees}" var="employee">
        ${employee.username},${employee.password},${employee.gender},

    </c:forEach>
    </body>


    添加页面
    <s:form name="manage_add" namespace="/employee" method="post">
        用户名:<s:textfield name="employee.username"></s:textfield>复合类型采用的方式
    </s:form>

    先创建Action
    package cn.itcast.action;

    import org.springframework.stereotype.Controller;

    @Controller 交给Spring管理  @Scope("prototype")修改为这种类型每次请求Spring都会创建Action否则是单例模式会被其它访问所修改
    public class EmployeeManageAction{
            @Resource EmployeeServiec  employeeService;  //注入业务Bean
            public String addUI(){
                  return "add";//返回视图
    }
             public String add(){
                 employeeService.save(employee);
                 ActionContext.getContext().put("message","保存成功");
                 return "message";
         }
    }


    struts.xml配置在定义个Action
    <package>
        <action name="message_*" class="employeeManagerAction" method="{1}">
            <result name="add">/WEB-INF/page/employeeAdd.jsp</result>
            <result name="message">/WEB-INF/page/message.jsp</result>
        </action>
    </package>


     

  • 相关阅读:
    Unity Glossary
    Event-Driven Programming: Introduction, Tutorial, History (Stephen Ferg 著)
    2019年11月
    2019年10月
    2019年9月
    LuaFramework 学习
    xLua 学习
    2019年8月
    【原】AFNetworking源码阅读(二)
    【原】AFNetworking源码阅读(一)
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2104725.html
Copyright © 2011-2022 走看看