应用Hibernate技框架术示例Word文档格式.docx
- 文档编号:20569131
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:34
- 大小:879.14KB
应用Hibernate技框架术示例Word文档格式.docx
《应用Hibernate技框架术示例Word文档格式.docx》由会员分享,可在线阅读,更多相关《应用Hibernate技框架术示例Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
(2)下载SLF4J(http:
//www.slf4j.org/download.html)
3、hibernate3.3.2的系统包文件的结构与前面的各个版本的文件结构发生了变化。
(1)然后将下面的各个*.lib库文件(总共13文件)在Eclipse中导入放到Web应用的/WEB-INF/lib目录中。
antlr-2.7.6.jar、cglib-2.2.jar、commons-collections-3.1.jar、commons-logging-1.0.4.jar(在Struts中已经包含有,可以不再需要它)、javassist-3.9.0.GA.jar、ehcache-1.2.3.jarhibernate3.jar、jta-1.1.jar、dom4j-1.6.1.jar和log4j-1.2.15.jar、slf4j-api-1.5.8.jar和slf4j-simple-1.5.8.jar和c3p0-0.9.1.jar。
4、同时还保证在本Project中还应该包含有MySQL的JDBC驱动程序的库mysql-connector-java-5.1.6-bin.jar
如果项目中的数据库是Oracle数据库,则应该添加下面的系统库
连接数据库系统---构建Hibernate的数据库连接环境
1、设计数据库表
(1)设置数据库中的各个主键
(2)提供一些测试用的数据
2、为本程序提供hibernate.cfg.xml文件(不需要hibernate.properties文件)
Hibernate从其配置文件中读取和数据库连接有关的信息,这个配置文件应该位于应用的classpath中(对于Web项目为WEB-INF/classes目录)。
提高该配置文件实现连接指定的数据库。
(1)放到src的目录下
指定文件名称为hibernate.cfg.xml
将进入MyEclipse中的Hibernate的可视化状态
可以可视化化的方式进行配置
(2)内容为下面的
<
?
xmlversion='
1.0'
encoding='
gb2312'
>
!
DOCTYPEhibernate-configurationPUBLIC"
-//Hibernate/HibernateConfigurationDTD//EN"
"
hibernate-configuration>
<
session-factory>
propertyname="
dialect"
org.hibernate.dialect.MySQLDialect<
/property>
<
connection.driver_class"
com.mysql.jdbc.Driver<
connection.url"
jdbc:
mysql:
//localhost:
3306/DataBase<
connection.username"
root<
connection.password"
show_sql"
true<
--将Hibernate发送给数据库的sql显示出来-->
mappingresource="
Book.hbm.xml"
/>
<
--实体映射文件-->
/session-factory>
/hibernate-configuration>
3、配置log4j.properties属性文件
(1)配置一个日志系统
Hibernate使用Apachecommons-logging来为各种事件记录日志,commons-logging将直接输出到ApacheLog4j(如果在类路径中包括log4j.jar)或JDK1.4logging(如果运行在JDK1.4或以上的环境下);
这允许我们在Log4j和JDK1.4logging之间进行选择。
但多数开发者喜欢Log4j。
(2)配置log4j.properties属性文件
从Hibernate的分发版(它在etc/目录下)拷贝log4j.properties与hibernate.cfg.xml.放在一起。
内容如下:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:
%L-%m%n
log4j.rootLogger=warn,stdout
log4j.logger.org.hibernate=info
log4j.logger.org.hibernate.type=info
log4j.logger.org.hibernate.tool.hbm2ddl=debug
(3)缺省情况下,只有Hibernate的启动信息会显示在标准输出上
在应用系统运行过程中,可以观察Hibernate的提示内容。
实现对PO类和数据库表之间的映射
1、编写和实现本例中的PO类
(1)添加一个PO类---类名称为Book,包名称为com.px1987.sshwebcrm.dao.pobject;
(2)在该类中增加各个属性,并提供get/set方法
privateStringid;
privateStringbookName;
privatecharbookKind;
privatefloatbookPrice;
(3)最后的代码为下面的状态
packagecom.px1987.sshwebcrm.dao.pobject;
importjava.util.*;
publicclassBook{
privateStringid;
privateStringbookName;
privatecharbookKind;
publicBook(){
}
publicStringgetId()
{
returnid;
privatevoidsetId(Stringid)//?
this.id=id;
publicStringgetBookName()
returnbookName;
publicvoidsetBookName(StringnewBookName)
this.bookName=newBookName;
publicchargetBookKind()
returnbookKind;
publicvoidsetBookKind(charnewBookKind)
this.bookKind=newBookKind;
publicfloatgetBookPrice()
returnbookPrice;
publicvoidsetBookPrice(floatnewBookPrice)
this.bookPrice=newBookPrice;
@Override
publicinthashCode(){
finalintPRIME=31;
intresult=1;
result=PRIME*result+bookKind;
result=PRIME*result+((bookName==null)?
0:
bookName.hashCode());
result=PRIME*result+Float.floatToIntBits(bookPrice);
result=PRIME*result+((id==null)?
id.hashCode());
returnresult;
}
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(getClass()!
=obj.getClass())
finalBookother=(Book)obj;
if(bookKind!
=other.bookKind)
if(bookName==null){
if(other.bookName!
=null)
returnfalse;
}elseif(!
bookName.equals(other.bookName))
if(Float.floatToIntBits(bookPrice)!
=Float.floatToIntBits(other.bookPrice))
if(id==null){
if(other.id!
id.equals(other.id))
returntrue;
}
注意:
OOP倡导的是基于setter/getter的方法访问,而非直接访问域。
因此其各个属性设置为private。
而其中的equals和hashCode方法可以采用Eclipse工具自动产生
Hashcode和equals这2个方法都是用来判断2个对象是否相等的,但是他们是有区别的。
equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。
简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。
举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
这里不可以重复是说equals和hashcode只要有一个不等就可以了!
所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。
我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。
举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。
同时还要注意,在PO类中药提供默认的构造方法,否则将会出现下面的错误信息。
2、映射前面的Book数据库表——声明它的映射元数据
(1)映射文件的作用
对象和关系数据库之间的映射通常是用一个XML文档(XMLdocument)来定义的。
这个映射文档被设计为易读的,并且可以手工修改。
映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。
(2)Hibernate采用XML文件来配置对象-关系映射,有以下优点
●Hibernate既不会渗透到上层域模型(业务处理层)中,也不会渗透到下层数据模型(数据库系统)中。
●软件开发人员可以独立设计域模型,不必强迫遵守任何规范。
●数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。
●对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。
Hibernate没有渗透到域模型中,是指在持久化类中没有引入任何HibernateAPI。
但是对于应用中负责处理业务的过程域对象,当然应该借助HibernateAPI来操纵数据库。
可以直接在Eclipse的项目视图中(3)增加一个Book.hbm.xml文件
(4)映射文件的内容——简化版
xmlversion="
1.0"
DOCTYPEhibernate-mapping
PUBLIC"
-//Hibernate/HibernateMappingDTD3.0//EN"
hibernate-mapping>
classname="
com.px1987.sshwebcrm.dao.pobject.Book"
table="
Book"
idname="
id"
>
columnname="
book_id"
/>
generatorclass="
uuid.hex"
/id>
bookName"
bookKind"
bookPrice"
/class>
/hibernate-mapping>
(5)正常版
com.px1987.hexample.pobject.Book"
type="
string"
unsaved-value="
null"
sql-type="
char(32)"
not-null="
true"
length="
32"
(5)该Book.hbm.xml存放的位置
(6)保证在hibernate.cfg.xml文件中添加对Book.hbm.xml的引用定义
编程基于HibernateAPI的DAO组件
1、设计创建SessionFactory对象的HibernateUtil的辅助类
(1)增加一个类,名称为HibernateUtil,包名称为com.px1987.sshwebcrm.dao.util
HibernateUtil这个类帮助我们创建SessionFactory对象、并管理Session。
(2)编程该类
packagecom.px1987.sshwebcrm.dao.util;
importorg.hibernate.*;
importorg.hibernate.cfg.*;
publicclassHibernateUtil{
privatestaticfinalSessionFactorysessionFactory;
/*静态初始器,当JVM(Java虚拟机)加载HibernateUtil类时,会执行该静态代码块。
*/
static{
try{
//创建SessionFactory对象的代码(但不能重复创建)
//sessionFactory=newConfiguration().configure("
c:
/xxx/hibernate.cfg.xml"
).buildSessionFactory();
sessionFactory=newConfiguration().configure().buildSessionFactory();
catch(Throwableex){
thrownewExceptionInInitializerError(ex);
publicstaticfinalThreadLocalthreadLocal=newThreadLocal();
publicstaticSessioncurrentSession(){
SessioncurrentSession=(Session)threadLocal.get();
//OpenanewSession,ifthisThreadhasnoneyet
if(currentSession==null){
currentSession=sessionFactory.openSession();
threadLocal.set(currentSession);
returncurrentSession;
publicstaticvoidcloseSession(){
if(currentSession!
currentSession.close();
threadLocal.set(null);
privatestaticSessionFactorygetSessionFactory()throwsHibernateException{
returnsessionFactory;
2、设计访问数据库表中的数据的业务组件HibernateDAOBean.java类
(1)添加一个接口HibernateDAOInterface,包名称为com.px1987.sshwebcrm.dao.inter-----我们面向接口编程
(2)在该接口中提供如下的方法定义
packagecom.px1987.sshwebcrm.dao.inter;
importjava.util.ArrayList;
importorg.hibernate.HibernateException;
publicinterfaceHibernateDAOInterface{
publicArrayListdoSelectBookDataFromDB(StringselectHQL)
throwsHibernateException;
publicbooleandoInsertBookDataToDB()
throwsHibernateException,jav
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 Hibernate 框架 示例
![提示](https://static.bdocx.com/images/bang_tan.gif)