Spring如何与Hibernate整合

就像以前讲得那样,框架的学习最主要的就是思想的理解和配置文件的书写问题,所以还是先讲配置文件:
在spring与Hibernate的整合中,配置文件主要都集中在了spring的配置文件里,如下例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- - Application context definition for "spring" DispatcherServlet. -->
<beans>
<!--这最开始的部分是Hibernate与数据库进行连接并进行表的绑定 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://192.168.151.72:3306/quickstart</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>Customer.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!--这部分应该是spring与Hibernate进行数据交互的部分 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="bean" class="com.ln.spring.DataImpl">
<property name="sessionFactory">
<ref local="sessionFactory"></ref>
</property>
</bean>
<bean id="beanFactory"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="bean" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!--这部分则是spring的action与bean(数据)进行交互 -->
<bean id="LoginAction" class="com.ln.spring.LoginAction">
<property name="data">
<ref bean="beanFactory" />
</property>
</bean>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">LoginAction</prop>
</props>
</property>
</bean>
</beans>
如上所示,配置文件初看起来很长,很麻烦。但是(如上注释)我们可以分为三方面来看(由于在spring中所有要进行部署的类或配置信息一般都定义一个先定义一个 “id”为"***"的bean,所以下面遇到这种情况之说:定义一个“***”):
1.Hibernate-db:
先定义一个"dataSource" (具体配置与hibernate.cfg.xml中的一致),然后定义一个“sessionFactory",用它调用”dataSource”,并且在这个bean里面定义“hibernateProperties“(即有关hibernate的一些设置),以及与表对应的配置文件” className”.hbm.xml。
2. Hibernate-spring:
先定义一个“transactionManager”,用它调用上面定义的“sessionFactory”,之后定义一个接口实现类“bean“(它也调用上面定义的“sessionFactory”)和与Hibernate进行交互的接口“beanFactory”。用“beanFactory”调用“transactionManager”和“bean“以及定义名为"transactionAttributes"的交互参数。
3.Spring-action spring-bean
定义“LoginAction”,对应spring中用来处理业务的action。并定义“urlMapping”,用来定义页面与action的对应。
二.关于要引入的包,除了要引入spring,hibernate以及数据库驱动包之外,还要引入一个由第三方提供的aopalliance.jar包(它好像就是对spring和hibernate进行整合的包)。
三.附上本例所用到的源代码:
Customer.java:
package com.ln.hb;

import java.io.Serializable;
public class Customer implements Serializable {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}

Data.java:
/*
* Created on 2005/01/08
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.ln.spring;
import java.util.List;
import com.ln.hb.Customer;

/**
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public interface Data {
public void insertCustomer(Customer customer);
public List selectCustomer(String sql);
}
DataImpl.java:
package com.ln.spring;
import java.util.List;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.ln.hb.Customer;

/**
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class DataImpl extends HibernateDaoSupport implements Data {
public void insertCustomer(Customer customer) {
getHibernateTemplate().save(customer);
}
public List selectCustomer(String sql)
{
return getHibernateTemplate().find(sql);
}
}
LoginAction.java:
package com.ln.spring;

/**
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.ln.hb.Customer;
public class LoginAction implements Controller {
Data data;

public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Data userDAO=(Data) data;
Customer customer = new Customer();
// user.setUsername("erica");
// user.setPassword("mypass");
// userDAO.insertCustomer(user);
List list=userDAO.selectCustomer("from Customer as customer");
for(int i=0;i<list.size();i++)
{
System.out.println(((Customer)list.get(i)).getUsername());
}
return new ModelAndView("main.jsp");
}
}
Customer.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.ln.hb.Customer" table="CUSTOMER">
<id name="id" column="CID">
<generator class="increment" />
</id>
<property name="username" column="USERNAME" />
<property name="password" column="PASSWORD" />
</class>
</hibernate-mapping>
web.xml:
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>hbspring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hbspring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


*这篇文章的配置文件部分讲解的不是很详细,稍后我会把配置文件的注释写上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值