<%@ page contentType="text/html; charset=gb2312"%> 实例学习Spring和Hibernate的一点点体会
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
实例学习Spring和Hibernate的一点点体会
     发布者: 发布时间:2006-07-19
昨天用Spring写DAO,有朋友说比较Hibernate还是麻烦一点.所以今天来看一下Spring和Hibernate有多方便啦.

我用的IDE是Eclipse2.1.2

下面是要引入的JAR包
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
<classpathentry kind="lib" path="D:/classes/spring.jar"/>
<classpathentry kind="lib" path="D:/classes/junit-3.8.1.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-logging-1.0.3.jar"/>
<classpathentry kind="lib" path="D:/classes/spring-dao.jar"/>
<classpathentry kind="lib" path="D:/classes/mysql-connector-java-3.0.9-stable-bin.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-dbcp-1.1.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-pool-1.1.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-collections.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-beanutils.jar"/>
<classpathentry kind="lib" path="D:/classes/commons-lang-2.0.jar"/>
<classpathentry kind="lib" path="D:/classes/hibernate2.jar"/>
<classpathentry kind="lib" path="D:/classes/jta.jar"/>
<classpathentry kind="lib" path="D:/classes/dom4j-1.4.jar"/>
<classpathentry kind="lib" path="D:/classes/ehcache.jar"/>
<classpathentry kind="lib" path="D:/classes/odmg.jar"/>
<classpathentry kind="lib" path="D:/classes/cglib-2.0-rc2.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

今天还是先看看Spring的配置文件吧,Hibernate和Spring融合,大部分功能由配置文件搞定了.

Hibernate-Context.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>Spring Quick Start</description>
<!-- datasource -->
<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://localhost/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<!-- hibernate support -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean"
>
<property name="dataSource">
<ref local="datasource"/>
</property>
<property name="mappingResources">
<list>
<value>com/bcxy/dao/hibernate/Test.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>
<!-- hibernate dao -->
<bean id="hibernatedao"
class="com.bcxy.spring.dao.TestDAO"
>
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

Spring管理了Hibernate的Session,确实方便了很多.

写个接口先
ITtestDAO.java文件

package com.bcxy.spring.dao;

import com.bcxy.dao.hibernate.Test;

public interface ITestDAO {

void insertTest(Test test);

}

TestDAO.java文件

package com.bcxy.spring.dao;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

import com.bcxy.dao.hibernate.Test;

public class TestDAO extends HibernateDaoSupport implements ITestDAO {

public void insertTest(Test test) {
//
getHibernateTemplate().save(test);
}

}

需要继承HibernateDaoSupport类

这么少的几行代码,能用吗?来用JUnit测试一下吧.

/*
* Created on 2004-10-9
*
* To change the template for this generated file go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import junit.framework.TestCase;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.xml.XmlBeanFactory;

import com.bcxy.dao.hibernate.Test;
import com.bcxy.spring.dao.ITestDAO;

public class TestDAOTest extends TestCase {

.......
public void testInsertTest() throws BeansException, FileNotFoundException {
XmlBeanFactory beans = new XmlBeanFactory(new FileInputStream("Hibernate-Context.xml"));
ITestDAO tests = (ITestDAO)beans.getBean("hibernatedao");
Test test = new Test();
test.setId(8);
test.setUn("testtest");
test.setPw("testtest");
tests.insertTest(test);
}
......
}

真的可以用啊,太厉害了--Spring!!!

这段代码似乎并没有什么特殊,但有一个细微之处:
ITestDAO tests = (ITestDAO)beans.getBean("hibernatedao");
这里并没有直接用UserDAO对获得的Bean实例进行强制转型。这与上面
JdbcTemplate的测试代码不同。并非完全出自设计上的考虑,这里情况有些特殊,我们可
以尝试一下用TestDAO类对bean实例进行强制转型,不过将得到一个
ClassCastException,程序异常中止。
为什么会出现这样的问题?是不是只有在使用Hibernate才会出现这样的问题?事实
并非如此,如果对上面基于JdbcTempate的TestDAO进行改造,使之实现ITestDAO接口,
同样的问题也将会出现。ITestDAO接口本身非常简单,显然也不是导致异常的原因所在。
原因在于Spring的AOP实现机制,前面曾经提及,Spring中的事务管理实际上是基于
动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java Dynamic
Proxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备
进行代理的方法。而对于没有实现任何接口的Java Class,需要采用其他方式,Spring通
过CGLib10实现这一功能。
当TestDAO没有实现任何接口时(如JdbcTemplate示例中)。Spring通过CGLib对
TestDAO进行代理,此时getBean返回的是一个继承自TestDAO类的子类实例,可以通
过TestDAO对其强制转型。而当TestDAO实现了ITestDAO接口之后,Spring将通过Java
Dynamic Proxy机制实现代理功能,此时返回的Bean,是通过
java.lang.reflect.Proxy.newProxyInstance方法创建的ITestDAO接口的一个代理实
现,这个实例实现了ITestDAO接口,但与TestDAO类已经没有继承关系,因此无法通过
TestDAO强制转型。

参考: 夏昕--<Spring开发指南>

有一个问题,就是什么时间,在什么地点,如何生成可取得Bean对象的实例?
下面有一个例子:

/*
* Created on Mar 12, 2004
*
* (c) 2004, Mark Eagle, meagle@meagle.com
* relased under terms of the GNU public license
* http://www.gnu.org/licenses/licenses.html#TOCGPL
*/
package com.meagle.action;

import javax.servlet.ServletContext;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.meagle.service.IOrderService;

/**
* @author meagle
*
*
*/
public abstract class BaseAction extends Action {

private IOrderService orderService;

public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
ServletContext servletContext = actionServlet.getServletContext();
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.orderService = (IOrderService) wac.getBean("orderService");
}

protected IOrderService getOrderService() {
return orderService;
}

}

请大家提示一下,还有什么方式呢?


有什么问题可发邮件联系: webmaster@bcxy.com
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
几种上传方法介绍和比较
Eclipse使用技巧
JSP自学笔记
掌握 Ajax(1-3)
详解怎样使用Axis开发Web Service的实例
学习Web 2.0的方向盘
 
最近评论:
        
Greg
ad6de6f685f9e8b208e063081178446b http://taglia-abbigliamento-forte.tzlnou.biz/ http://traghetto-per-la-grecia.zibtye.biz/ http://presidenza-consiglio-dei-ministro-it.enadzh.biz/ http://percorso-scolastico-bullismo.ppdpwx.biz/ http://orsini-franco-rivendita-sanitario.kajgdw.biz/ http://alce-corna.tzlnou.biz/ http://emorroidi-roma.zibtye.biz/ http://mansioni-operatore-dell-ufficiale-giudiziario.ppdpwx.biz/ http://convertitore-file-mtv.enadzh.biz/ http://castelli-nelle-marche.kajgdw.biz/ 69fae163d26a9b1682339a4eb6fc4ad9
        
Dakota
c468166fb4593e91d79478ef3044284c http://american-gigolo-locandina.kajgdw.biz/ http://definizione-di-luogo-di-lavoro.ygvhik.biz/ http://la-storia-romana.ygvhik.biz/ http://dimensione-suono-ostia.kajgdw.biz/ http://foto-di-donna-indiane.ppdpwx.biz/ http://giochi-bimbo.iuatju.biz/ http://accordatore-per-chitarra.ppdpwx.biz/ http://ligabue-a-milano.iuatju.biz/ http://esempio-test-valutazione-cognitiva.zibtye.biz/ http://software-lettore-mp3-thomson.kajgdw.biz/ 69fae163d26a9b1682339a4eb6fc4ad9
        
Gaven
71394ae74638ad090c447ad3bc3021ff http://cammino-neocatecumenale-valencia.pvaeyo.org/ http://locandina-cinema-free.cqhnnx.org/ http://discoteca-mojito.pvaeyo.org/ http://polietilene-lastra-termoformate.gbdrme.org/ http://noleggio-macchine-fotografiche.vywyuh.org/ http://trattoria-casa-mia-milano.jnbwct.org/ http://casa-in-savona-per-vendita.pvaeyo.org/ http://addestrare-rottweiler.jnbwct.org/ http://www-gioca.hdpwsk.org/ http://definizione-cut-off-revisione-magazzino.jnbwct.org/ eb89aa2351bfb8dd061b0dc25061dcdb
        
Robert
b3f6a22b42e7bbe18ffbe86ae53f078d http://offerta-lavoro-segretaria-napoli.gbdrme.org/ http://punto-vendita-laminato-toscana.vywyuh.org/ http://31-dicembre-festa-pisa.hdpwsk.org/ http://centro-negri-arredamento.jnbwct.org/ http://carmelo-zappulla-mix.jnbwct.org/ http://promossi-diplomati-laureato.cqhnnx.org/ http://immagini-partite.cqhnnx.org/ http://stafilococco-haemolyticus.hdpwsk.org/ http://mutuo-formula-metodo-calcolo.gbdrme.org/ http://stella-natale-arena-verona.pvaeyo.org/ eb89aa2351bfb8dd061b0dc25061dcdb
        
Tyrese
1360d95578dd5d17da4352e6ca7c73ad EmilianoCarney ArakiElian EnriqueBabb EnriqueBabb KernJuancarlos JudahSimard FausettJosef DustyGinn JaylinMaltos ValdiviezoMickey 1bb5907b91a875f331998f8e4f2b0572
        
Jayden
2b977de690221eae2c5ce706d01f75ee RandolphMainor JorgeDuhn IsraelSim BommaritoChris BlaineKlick TrueloveMarc AaronCeleste UlshGabriel McfarrenJosiah RandolphMainor 1bb5907b91a875f331998f8e4f2b0572
        
Rocky
8c0fff48ecfcbd531fd648592b18150a scatola natale karaoke midi novita 2006 piastrelle bagni svolti ragioneria capodanno roma ristorante costruzione custodia subacquea prezzo giubbotto museum paolo castellina sofocle tragedia greca trucchi robin hood b8fb7d84153cc5c69600cbe1497734b2
        
Donta
79512e370d5f671b5f4eeef61e5f24da varano borghi trucchi gratis smackdown vs raw film lato paradiso confronto playstation 3 xbox 360 art 22 ccnl buffalo bill toro seduto canova compianto cristo giacca kappa italia mappa grande raccordo anulare roma stampa form etichetta b8fb7d84153cc5c69600cbe1497734b2
        
Patrick
39a21a92549ab3e2d3553015ee539715 http://programma-crea-calendario.miwcjz.com/ http://viaggio-lucca.qeshtw.in/ http://obblighi-di-assistenza-familiare.miwcjz.com/ http://istruzione-invio-sms-rete-fissa.bkqryo.com/ http://storico-giornali.aezqpa.com/ http://pianeta-terra-immagine.licoxi.in/ http://offerta-viaggi-romania-transilvania.licoxi.in/ http://figli-portatori-di-handicap.jnesky.in/ http://prisco-perugino.fzhoas.in/ http://noleggio-idropulitrice.jnesky.in/ b8a12f78e2ab8d9c8e5e94f78e975725
        
Erin
8b299cf695f5ad3b32081c19c85c42a8 http://aste-di-stato.vbglda.com/ http://profumo-roma-laura-biagiotti.kmyeyh.com/ http://farmacia-prezzo-medicinale.aezqpa.com/ http://m-c-t-c-omologazioni-archivio.kmyeyh.com/ http://statistiche-di-mercato.uylqdg.com/ http://ordine-dei-medici-pescara.qeshtw.in/ http://tappeto-tibetani.kvpzig.com/ http://chiavari-lavagna.kmyeyh.com/ http://hard-disk-esterno-usb-firewire.qeshtw.in/ http://sna-sindacato-agente.licoxi.in/ b8a12f78e2ab8d9c8e5e94f78e975725
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号