黑马程序员技术交流社区
标题: ssh整合 [打印本页]
作者: 丶笑笑 时间: 2018-7-6 10:15
标题: ssh整合
web项目:
整合的关键
有状态和无状态
XML配置整合hibernate基本原理:将seesionFactory交给spring管理(核心)
方式一:零障碍(了解)
spring配置文件去加载hibernate核心配置文件
方式二:spring管理hibernate配置不再需要hibernate.cfg.xml文件,所有配置在applicationContext.xml中操作,除了映射配置文件
LocalSessionFactoryBean:
**spring提供的用来整合hibernate的Bean**
其中有关于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包下自动扫描注解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |