详细解释Spring与Hibernate的整合
2016-01-13 17:38
543 查看
首先我们来看单纯的使用Hibernate时管理数据源:
在类路径下创建一个hibernate.cfg.xml
写入数据源的信息:
如上是hibernate的最简单的数据源配置。此处不进行过多解释。
hibernate的简单使用:
如上就是hibernate的简单使用过程。现在我们来看Spring与和hibernate的整合:
spring与hibernate的整合目的就是为了让 IOC 容器来管理 Hibernate 的核心接口SessionFactory以及让 Hibernate 使用上 Spring 的声明式事务来进行事务操作.
但在Spring整合Hibernate时。处理数据源有两种方法:
1)依然使用Hibernate的hibernate.cfg.xml来写数据源信息,在spring配置文件中使用DI把这个文件注入给SessionFactory接口
2)摒弃掉hibernate.cfg.xml,而将所有的数据源配置信息写在spring的配置文件中.下面详细介绍这两种方法:
方法一:
hibernate的配置文件hibernate.cfg.xml保持如上信息不变并把hibernate.cfg.xml文件注入给spring提供的LocalSessionFactoryBean:
spring中使用hibernate则不需要直接通过hinernate来完成,而是通过spring提供的HibernateTemplate类来完成
spring来管理事务:
在代码中使用:
操作将由hibernateTemplate来完成
方法二:
不需要hibernate.cfg.xml来完成Spring与hibernate的整合:
此时给类LocalSessionFactoryBean注入的不是configLocation这个文件而是一个dateSource除此之外还注入数据库的方言,hbm.xml文件等信息。至于其他的如hibernateTemplate的注入,配置事务管理器,事务的注解解析器 等于上述一摸一样:
代码详情:
我们看到上述代码中在导入c3p0连接池信息的时候我们使用了:
除了这种方法还有:
这两种方法都可以完成把外部properties数据导入进来.然后通过${key}来访问此properties文件中的值。
在类路径下创建一个hibernate.cfg.xml
写入数据源的信息:
[code]<hibernate-configuration> <session-factory> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">toor</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///test_hibernate_spring</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <!-- C3P0 连接池的配置 --> <property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.timeout">3600</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <!--c3p0配置结束 --> <!-- session要从当前线程中产生--> <property name="current_session_context_class">thread</property> <mapping resource="domain/Person.hbm.xml" /> </session-factory> </hibernate-configuration>
如上是hibernate的最简单的数据源配置。此处不进行过多解释。
hibernate的简单使用:
[code] Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); sessionFactory = configuration.buildSessionFactory(); //从当前线程中(ThreadLocal)中,把session提取出来如果没有就使用openSession() Session session = sessionFactory.getCurrentSession(); //hibernate的所以操作都必须在事务中 Transaction transaction = session.beginTransaction(); Person p = new Person(); p.setName("111111111111111"); p.setDescription("2222222222222"); session.save(p); transaction.commit();
如上就是hibernate的简单使用过程。现在我们来看Spring与和hibernate的整合:
spring与hibernate的整合目的就是为了让 IOC 容器来管理 Hibernate 的核心接口SessionFactory以及让 Hibernate 使用上 Spring 的声明式事务来进行事务操作.
但在Spring整合Hibernate时。处理数据源有两种方法:
1)依然使用Hibernate的hibernate.cfg.xml来写数据源信息,在spring配置文件中使用DI把这个文件注入给SessionFactory接口
2)摒弃掉hibernate.cfg.xml,而将所有的数据源配置信息写在spring的配置文件中.下面详细介绍这两种方法:
方法一:
hibernate的配置文件hibernate.cfg.xml保持如上信息不变并把hibernate.cfg.xml文件注入给spring提供的LocalSessionFactoryBean:
[code]<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 导入hibernate配置文件--> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> </bean>
spring中使用hibernate则不需要直接通过hinernate来完成,而是通过spring提供的HibernateTemplate类来完成
[code] <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>
spring来管理事务:
[code]<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <!-- 事务的注解解析器 --> <tx:annotation-driven transaction-manager="transactionManager"/>
在代码中使用:
操作将由hibernateTemplate来完成
[code]@Resource(name="hibernateTemplate") private HibernateTemplate hibernateTemplate; @Transactional public void savePerson(){ Person person = new Person(); person.setUsername("666"); person.setPassword("6666"); hibernateTemplate.save(person); }
方法二:
不需要hibernate.cfg.xml来完成Spring与hibernate的整合:
此时给类LocalSessionFactoryBean注入的不是configLocation这个文件而是一个dateSource除此之外还注入数据库的方言,hbm.xml文件等信息。至于其他的如hibernateTemplate的注入,配置事务管理器,事务的注解解析器 等于上述一摸一样:
代码详情:
[code]<!--导入c3p0的信息在次xml文件中就可以使用导入文件的信息--> <context:property-placeholder location="classpath:c3p0DB.properties"/> <!-- 配置 C3P0 数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> </bean> <!--注入datasource给sessionFactory以及数据库的方言和hbm.xml--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <!-- 导入映射文件所在的路径 --> <property name="mappingDirectoryLocations"> <list> <value>classpath:domain <!--加载这个路径下的所有.hbm.xml--> </value> </list> </property> <!-- Hibernate其他配置 方言 等--> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hbm2ddl.auto">update</prop> </props> </property> </bean>
我们看到上述代码中在导入c3p0连接池信息的时候我们使用了:
[code] <context:property-placeholder location="classpath:c3p0DB.properties"/>
除了这种方法还有:
[code] <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:c3p0DB.properties</value> </property> </bean>
这两种方法都可以完成把外部properties数据导入进来.然后通过${key}来访问此properties文件中的值。
相关文章推荐
- Java安全应用——Bouncy Castle Crypto API
- CXF3.0.2+Spring3.2.14 WebService入门实例四
- OC里面的点语法与java中点调用的区别
- Hibernate 映射类型与Java 类型对照
- Elasticsearch java api 基本搜索部分详解
- Java中两类逻辑运算符的区别
- java BigDecimal的使用和四舍五入及格式规范(精准数据)
- java中的string[] args
- MyBatis整合Spring
- Java笔记2:Eclipse编写第一个Java程序
- eclipse注释模板
- spring mvc快速搭建——Hello World!
- 使用Java为图片添加水印
- JAVA注释&标识符&关键字
- 在eclipse开发工具中使用JUnit4进行单元测试详解(二)提高篇
- Quertz2.2.2与spring整合使用
- Java中的数据类型
- 深入浅出设计模式(六):8.门面模式
- java 生成word应用freemarker
- java常用集合总结