A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丶笑笑 初级黑马   /  2018-7-6 10:15  /  858 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

web项目:
整合的关键
有状态和无状态
XML配置整合hibernate
基本原理:将seesionFactory交给spring管理(核心)
方式一:零障碍(了解)
spring配置文件去加载hibernate核心配置文件
方式二:spring管理hibernate配置
不再需要hibernate.cfg.xml文件,所有配置在applicationContext.xml中操作,除了映射配置文件
LocalSessionFactoryBean
**spring提供的用来整合hibernateBean**
其中有关于hibernate配置文件的属性,只需要在applicationContext.xml中设置bean标签即可
需要:
数据源(连接池)
    //提供操作数据库的必要条件
LocalSessionFactoryBean
    //整合hibernate  需要注入连接池  得到sessionFactory对象,由spring管理
domain
    //PO类  :实体类+映射配置文件
   
   
//以上整合hibernate
---------------------------------------我是分割线--------------------------------------
//以下进行数据库操作,开启事务
   
   
   
dao
    //由于整合hibernate,所以需要继承hibernateDaoSupport
    //需要注入sessionFactory
service
    //需要注入dao
配置管理器
    //类:HibernateTransactionManager需要注入sessionFactory
配置通知
    //一样
切面
    //一样
<bean id="sessionFactory"
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!-- 加载连接池-->
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <!-- 配置可以简写成以下-->
        <value>
           hibernate.show_sql=true
           hibernate.dialect=org.hibernate.dialect.MySQLDialect
           hibernate.hbm2ddl.auto=update
           hibernate.format_sql=true
        </value>
    </property>
    <!-- 引入映射配置文件-->
    <property name="mappingDirectoryLocations">
        <list>
            <value>classpath:com/itnannan/domain</value>
        </list>
    </property>

   
   
    <!--其他两种形式-->
    <property name="mappingLocations">
         <list>
             <value>classpath:cn/ithiema/domain/User.hbm.xml</value>
          </list>
    </property>
     <property name="mappingResources">
        <list>
            <value>cn/itheima/domain/User.hbm.xml</value>
        </list>
    </property>
</bean>
配置事务:
<!-- 配置事务管理器 -->
<!--整合hibernate后事务管理器需要获得和dao层相同的session来管理事务-->
<bean id="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 事务 通知-->
<tx:advice id="bookAdvice"transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*"/>
        <tx:method name="del*"/>
        <tx:method name="find*" read-only="true"/>
    </tx:attributes>
</tx:advice>
<!-- 切面 -->
<aop:config>
    <aop:pointcut expression="execution(* com.itnannan.service.BookService.*(..))" id="bookPoint"/>
    <aop:advisor advice-ref="bookAdvice"pointcut-ref="bookPoint"/>
</aop:config>
数据源的初始化放在外面
Q:hibernate完成DAO层的操作,那么整合后DAO层如何进行操作数据库?
A
整合后DAO层:
<!-- 声明dao -->
<bean id="userDao" class="cn.itheima.dao.UserDAOImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
测试:
需要的对象都需要由spring创建,也就是需要在XML/注解配置
整合struts2
原理分析
struts2框架中所有的action interceptor result全是bean,struts2框架中默认是使用strtus2自己bean初化操作.
当我们在工程中导入struts2-spring-plugin.jar文件,就会加载这个包下的strtus-plugin.xml,这时bean的创建由spring来管理。
方式一:这种方案是基于spring管理action
需要:
web.xml中配置spring和struts过滤器
allicationContext.xml中
    action
       //spring创建action,需要注入service对象id="userAction"
struts.xml中
    <package name="default"namespace="/" extends="struts-default">
       <actionname="user_add" class="userAction" method="user_add">
           <resultname="success">/success.jsp</result>
       </action>
    </package>
方式二:action中自动注入service
需要:
web.xml中配置spring和struts过滤器
allicationContext.xml中:
    不需要手动配置action
struts.xml中
    <package name="default"namespace="/" extends="struts-default">
       <actionname="user_add" class="com.itnannan.action.UserAction" method="user_add">
           <resultname="success">/success.jsp</result>
       </action>
    </package>
   
action中
    private UserService userService;
    public void setUserService(UserServiceuserService) {
       this.userService = userService;
    }   
Annotation配置
注解配置只能加载自己定义的类
需要:
PO类需要注解
添加的注解:
    @Entity 定义实体类
    @Table 定义表
    @Id 主键
    @GeneratedValue生成主键策略
    @Column 定义列
<!-- 加载注解类-->
<property name="packagesToScan">
    <list>
        <value>com.itnannan.domain</value>
    </list>
</property>

三层对象需要注解:
添加的注解:springIOC基本功能
    @Respostory  @Service @Controller
<!-- 开启注解扫描  @Respostory @Service  @Controller-->
<context:component-scanbase-package="com.itnannan"/>
dao层注入sessionfactory:
    @Autowired
    public  void setSF(SessionFactory factory){
       super.setSessionFactory(factory);
    }

事务管理需要注解:
添加的注解:
    @Transactional(readOnly=false)
<!-- 配置事务管理器-->
<bean id="transtationManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事务注解驱动-->
<tx:annotation-driventransaction-manager="transtationManager"/>

action需要注解:
    代替Struts配置文件,整合的方式对应第一种
添加的注解:
   @Scope("prototype")
   @Namespace("/")
   @ParentPackage("struts-default")
   @Action(value="user_add",results= { @Result(name ="success", location = "/success.jsp") })
在action包下自动扫描注解

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马