java框架篇---spring hibernate整合

在會使用hibernate 和spring框架後 兩個框架的整合就變的至關容易了,mysql

爲何要整合Hibernate?
一、使用Spring的IOC功能管理SessionFactory對象
 LocalSessionFactoryBean
二、使用Spring管理Session對象 
 HibernateTemplate
三、使用Spring的功能實現聲明式的事務管理spring

第一步:搭建hibernate環境(包括引入hibernate的jar,包配置數據源,創建類和表的映射),爲何這麼作。我以爲hibernate是最重要的。由於沒有spring不影響我往數據裏面添加記錄。Spring僅僅是一個容器。這就很少說了。sql

第二步:配置spring的環境(引入jar和寫一個bean.XML的配置信息)數據庫

省略了hibernate.cfg.xml文件 所有託管於spring配置文件apache

在純粹的Hibernate訪問中,應用程序須要手動建立SessionFactory實例,可想而知,這不是一個優秀的策略。在實際開發中,但願以一種聲明式的方式管理SessionFactory實例,直接以配置文件來管理SessionFactory實例,在示範Struts的PlugIn擴展點時,session

Spring的IoC容器則提供了更好的管理方式,它不只能以聲明式的方式配置Session- Factory實例,也可充分利用IoC容器的做用,爲SessionFactory注入數據源引用。框架

下面是Spring配置文件中配置Hibernate SessionFactory的示範代碼:測試

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.1.xsd
           http://www.springframework.org/schema/aop            
           http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  " default-autowire="byName">
    <context:annotation-config />
    <context:component-scan base-package="com.bjsxt" />

    <!-- 
    也可使用這種方法 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/myuse" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean>
--> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.bjsxt.model.User</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> </beans>

jdbc.propertiesurl

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/myuse
jdbc.username=root
jdbc.password=root  

第三步:在spring裏面註冊hibernate。spa

<bean id="txManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
<tx:annotation-driven transaction-manager="txManager"/>

在Dao組件中,全部的持久化操做都經過HibernateTemplate實例完成,而HibernateTemplate操做數據庫很是簡潔,大部分CRUD操做均可經過一行代碼解決問題。下面介紹如何經過HibernateTemplate進行持久層訪問。

HibernateTemplate提供了很是多的經常使用方法來完成基本的操做,好比一般的增長、刪除、修改、查詢等操做,Spring 2.0更增長了對命名SQL查詢的支持,也增長了對分頁的支持。大部分狀況下,使用Hibernate的常規用法,就可完成大多數DAO對象的CRUD操做。下面是HibernateTemplate的經常使用方法簡介:

   ● void delete(Object entity),刪除指定持久化實例。

   ● deleteAll(Collection entities),刪除集合內所有持久化類實例。

   ● find(String queryString),根據HQL查詢字符串來返回實例集合。

   ● findByNamedQuery(String queryName),根據命名查詢返回實例集合。

   ● get(Class entityClass, Serializable id),根據主鍵加載特定持久化類的實例。

   ● save(Object entity),保存新的實例。

   ● saveOrUpdate(Object entity),根據實例狀態,選擇保存或者更新。

   ● update(Object entity),更新實例的狀態,要求entity是持久狀態。

   ● setMaxResults(int maxResults),設置分頁的大小。

下面是一個完整DAO類的源代碼:

測試:

package com.bjsxt.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bjsxt.model.User;

//Dependency Injection
//Inverse of Control
public class UserServiceTest {

    @Test 
    public void testAdd() throws Exception {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        
        UserService service = (UserService)ctx.getBean("userService");
        System.out.println(service.getClass());
        service.save(new User());
        
        ctx.destroy();
        
    }

}
相關文章
相關標籤/搜索