关于spring与Hibernate的整合

导读:

  关于spring与Hibernate的整合

  一.就像以前讲得那样,框架的学习最主要的就是思想的理解和配置文件的书写问题,所以还是先讲配置文件:

  在spring与Hibernate的整合中,配置文件主要都集中在了spring的配置文件里,如下例:

  

  

  

  

  

   class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">  class="org.apache.commons.dbcp.BasicDataSource"

  destroy-method="close">

  

   com.mysql.jdbc.Driver

  

  

   jdbc:mysql://192.168.151.72:3306/quickstart

  

  

   root

  

  

  

  

  

   class="org.springframework.orm.hibernate.LocalSessionFactoryBean">  class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

  

  

  

  

  

   Customer.hbm.xml

  

  

  

  

  

  net.sf.hibernate.dialect.MySQLDialect

  

   true

  

  

  

  

   class="org.springframework.orm.hibernate.HibernateTransactionManager">  class="org.springframework.orm.hibernate.HibernateTransactionManager">

  

  

  

  

  

  

  

  

  

   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

  

  

  

  

  

  

  

  

   PROPAGATION_REQUIRED

   PROPAGATION_REQUIRED,readOnly

  

  

  

  

  

  

  

  

  

   class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

  

  

   LoginAction

  

  

  

  

  如上所示,配置文件初看起来很长,很麻烦。但是(如上注释)我们可以分为三方面来看(由于在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;

  

  /**

  * @author n-liang

  *

  * 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;

  

  /**

  * @author n-liang

  *

  * 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;

  

  /**

  * @author n-liang

  *

  * 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;

  /**

  * @return Returns the data.

  */

  public Data getData() {

  return data;

  }

  /**

  * @param data The data to set.

  */

  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   {

  System.out.println(((Customer)list.get(i)).getUsername());

  }

  return new ModelAndView("main.jsp");

  }

  }

  Customer.hbm.xml:

     "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">  "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

  

  

  

  

  

  

  

  

  

  web.xml:

  

  

  

  

   hbspring

  

  org.springframework.web.servlet.DispatcherServlet

  

   1

  

  

   hbspring

   *.do

  

  

  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=249918



本文转自

http://blog.csdn.net/123xxx/archive/2005/01/12/249918.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值