spring与Hibernate的整合实例

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

springHibernate的整合中,配置文件主要都集中在了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>

       <!--部分应该springHibernate行数据交互的部分 -->

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

       <!--部分springactionbean(数据)行交互 -->

       <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包(它好像就是对springhibernate进行整合的包)。

三.附上本例所用到的源代码:

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值