首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络安全-> 安全在线
实例学习Spring和Hibernate的一点点体会-JSP教程,资料/其它
作者:网友供稿 点击:508
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
昨天用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




文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·在C#中使用代理的方式触发事件-.NET教程,C#语言
·Java socket编程入门[1]-JSP教程,Java技巧及代码
·VB.NET 操作 ACCESS OLE 字段内容-.NET教程,VB.Net语言
·实例学习Spring和Hibernate的一点点体会-JSP教程,资料/其它
·《XML指南》下载[CHM格式-.NET教程,XML应用
·锂离子动力电池待解决的使用技术问题
·ASP.NET下的Page Controller以及Template Method-.NET教程,Asp.Net开发
·用C#实现WEB浏览器-.NET教程,C#语言
·在Visual Studio 2005和ASP.NET 2.0中使用强类型数据存取-.NET教程,Asp.Net开发
·ASP和C#隐藏文件下载路径的方法-ASP教程,ASP技巧
最新文章
·论arp攻击防制的基本方法_安全在线教程
·七种最不安全的网络管理员_安全在线教程
·windows网络安全其实我们只差五步_安全在线教程
·确保无线网络安全实施的几种技术规范_安全在线教程
·从两大方面阻止域名劫持_安全在线教程
·对网站做一些简单的seo处理_seo网站优化
·如何减轻ddos攻击危害_安全在线教程
·防火墙封阻应用攻击的八项技术_安全在线教程
·防火墙的来历及应用现状_安全在线教程
·浅析ids与ips共生与发展_安全在线教程
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭