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包下自动扫描注解
|