导读:
关于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.youkuaiyun.com/TrackBack.aspx?PostId=249918
本文转自
http://blog.youkuaiyun.com/123xxx/archive/2005/01/12/249918.aspx
关于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.youkuaiyun.com/TrackBack.aspx?PostId=249918
本文转自
http://blog.youkuaiyun.com/123xxx/archive/2005/01/12/249918.aspx