spring和hibernate的集成
来源:互联网 发布:淘宝用图片找商品 编辑:程序博客网 时间:2024/05/20 21:20
spring:主jar,两个日志包,aop,cglib,juit包
spring可以替hibernate生成session工厂:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">//先创建session工厂的代理对象
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!--配置事务管理器
<bean id ="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">(也可说是事务管理器)
<property name=""sessionFactory" ref bean="sessionFactory">//通过注入工厂,来生成一个全局性的事务(事务是工厂生成的)
</bean>
<!--事务的传播特性-->//给某些方法增加一个全局性的事务,如add,deteler,modify,
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUWED"/>
<tx:method name="del*" propagation="REQUERD"/>
<tx:method name="modify*" propagation="REQUERD"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
//哪些类的哪些方法需要用到事务
<aop:config>//不需要配置切面,
<aop:pointcut id="allManagerMethod" expression="execution(* com.manager.*.*(..))">//给包下所有类的所有方法增加事务的传播特性
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice">//只有符合point-cut-ref下包的类的方法才会给增删改方法织入事务。
</aop:config>
利用面向切面的方式,给业务层的实现类创建代理对象,如userManager,logManager,在创建的时候不是对象本身,都是代理对象,当调用代理对象的增删改方法时,会调用切面的invoke方法,并在执行增删改方法之前织入advice(这个advice就是事务的传播特性,但会判断是否存在事务运行),然后创建一个全局性的事务。当执行另外一个业务的增删改方法时,若有一个全局性的事务,便不会创建事务,会利用之前的全局性的事务。不同线程也会共享一个事务。 注:此时的同步会放在事务上,这样就把安全级别降到事务上,实现了安全性和效率性的统一。在ThreadLocalMap中不会进行同步,这样也提高的效率。
由于加载数据不用事务,所以在业务层中不会对session进行关闭,为了不造成懒加载异常,通过懒加载过滤器去关闭session。(spring自动提供了一个懒加载的filter)
注:配置sessionFactory的另外一种办法:即不用读取cfg文件,通过spring配置即可:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost/xiaobai?characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="102627"></property>
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.characterEncoding">utf8</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>fgb.entity.user.User</value>
<value>fgb.entity.article.Article</value>
<value>fgb.entity.article.Comment</value>
<value>fgb.entity.article.ArticleClick</value>
<value>fgb.entity.album.Album</value>
<value>fgb.entity.album.Photo</value>
<value>fgb.entity.video.VideoSet</value>
<value>fgb.entity.video.Video</value>
<value>fgb.entity.aboutme.AboutMe</value>
<value>fgb.entity.noteleft.NoteLeft</value>
<value>fgb.entity.noteleft.NoteLeftPraise</value>
<value>fgb.entity.noteleft.NoteLeftReply</value>
<value>fgb.entity.noteleft.NoteLeftReply2</value>
<value>fgb.entity.music.MusicList</value>
<value>fgb.entity.music.Music</value>
</list>
</property>
</bean>
- Spring 和 Hibernate的集成
- Spring 和 Hibernate的集成
- spring和hibernate的集成
- spring和hibernate集成
- Spring和Hibernate集成
- FLEX和spring、hibernate的集成
- JSF和Hibernate、Spring的集成开发
- SpringMVC、Spring和Hibernate的集成
- jbpm和spring、hibernate的集成
- Spring Web MVC和Hibernate的集成
- spring和hibernate注解集成
- spring 集成hibernate和jdbcTemplate
- 测试spring和hibernate集成的时候出现的问题
- spring+hibernate+struts2的集成
- spring与hibernate的集成
- spring与hibernate的集成
- JMS消息服务器和Hibernate、Spring的集成开发
- hibernate的搭建(包括Spring集成)和调用
- Java之IO详解(一)
- U3D初学:Rigidbody
- 数据的增删改
- sphinx的Coreseek安装
- 解析XML格式数据-Pull解析方式
- spring和hibernate的集成
- 关于 fizz-buzz-whizz
- 静态链接中的那点事儿(2):C++二进制兼容性及跨平台初步
- 最近关于jquery的一点理解
- POJ题目分类(各种分类合集)
- theano入门学习
- 文章标题
- freeCodeCamp-Basic Algorithm Scripting
- 随心而动--Animation(1)