hibernate笔记.docx

上传人:b****1 文档编号:14632665 上传时间:2023-06-25 格式:DOCX 页数:78 大小:195.33KB
下载 相关 举报
hibernate笔记.docx_第1页
第1页 / 共78页
hibernate笔记.docx_第2页
第2页 / 共78页
hibernate笔记.docx_第3页
第3页 / 共78页
hibernate笔记.docx_第4页
第4页 / 共78页
hibernate笔记.docx_第5页
第5页 / 共78页
hibernate笔记.docx_第6页
第6页 / 共78页
hibernate笔记.docx_第7页
第7页 / 共78页
hibernate笔记.docx_第8页
第8页 / 共78页
hibernate笔记.docx_第9页
第9页 / 共78页
hibernate笔记.docx_第10页
第10页 / 共78页
hibernate笔记.docx_第11页
第11页 / 共78页
hibernate笔记.docx_第12页
第12页 / 共78页
hibernate笔记.docx_第13页
第13页 / 共78页
hibernate笔记.docx_第14页
第14页 / 共78页
hibernate笔记.docx_第15页
第15页 / 共78页
hibernate笔记.docx_第16页
第16页 / 共78页
hibernate笔记.docx_第17页
第17页 / 共78页
hibernate笔记.docx_第18页
第18页 / 共78页
hibernate笔记.docx_第19页
第19页 / 共78页
hibernate笔记.docx_第20页
第20页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

hibernate笔记.docx

《hibernate笔记.docx》由会员分享,可在线阅读,更多相关《hibernate笔记.docx(78页珍藏版)》请在冰点文库上搜索。

hibernate笔记.docx

hibernate笔记

第一章Hibernate基础

RelationalPersistenceforJava

持久化技术–Persistence

持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。

持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

JDBC(JavaDataBaseConnectivity)

Java语言访问数据库的一种规范,是一套API是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。

比如建立数据库连接、执行SQL语句进行数据的存取操作。

POJO

(PlainOldJavaObjects)简单的Java对象,无参的构造方法setter和getter方法

ORM

Object/RelationMapping对象—关系映射

JAVA反射机制

反射,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

Java中,反射机制(Reflection)使我们能够创建灵活的代码,这些代码可以在运行时自动匹配。

它也可以通过我们的程序代码获取对象本身的各类信息,如构造方法,字段,修饰符,方法等。

JPA

全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

搭建Hibernate4框架

1.添加jar

hibernate3.jar

hibernate3.0的核心jar包,常用的session,Query,Transaction都位于这个jar文件中。

antlr-2.7.6rc1.jar

ANTLR(ANotherToolforLanguageRecognition)是一个PCCTS制定的语言工具,它为他创建认定者,程序编译者,翻译者提供一个包括java,c#和C++在内的语法描述框架,使用from多态查询语句时需要它。

cglib-2.1.3.jar

CGL(CodeGenerationLibray)是一种高性能,高质量的代码产生库,Hibernate用它来实现po(persistentobject)字节码的动态生成。

asm.jar和asm-attrs.jar

ObjectWeb的字节码操纵框架,用来动态生成java代码。

commons-collections-2.1.1.jar

ApacheCommons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大

dom4j-1.6.1.jar

是一个JAVA的XMLAPI类似于jdom,用来读写XML文件,dom4j是一个非常优秀的JAVAXMLAPI,具有性能优异,功能强大和易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它

eheache-1.1.jar

EHCahe是一个纯JAVA的进程中的缓存,它具有经下特性,快速、简单、为hibernate充当可插入的缓存,最小的依赖性和全面的文档和测试

jta.jar

javaTransactionAPI(JTA)规范的包,是指定事务和事务处理和分布式事务处理系统之间的标准,JAVA接口,包括资源管理,应用服务,和事务应用程序。

commons-logging-1.0.4.jar

Jakarta的通用日志记录包

log4j-1.2.9.jar

Hibernate使用CommonsLoggingAPI可以使用log4j作为实施,log的机制,如果把log4j库放到上下文类目录中,commonsLogging就会使用log4j和它上下文类路径找到的log4j.properties文件。

log4j下载地址:

http:

//www.apache.org/dist/logging/log4j/

c3p0.jar

C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO连接池。

如果你准备用这个连接池,就需要这个jar包

aas.jar

JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。

所以实际上是多余的包

jdbc2_0-stdext.jar

JDBC2.0的扩展包,一般来说数据库连接池会用上它。

不过AppServer都会带上,所以也是多余的

jaxen-1.1-beta-7.jar

处理xml的xpath。

Hibernate执行原理:

2.src目录下创建hibernate.properties(连接数据库)

hibernate.connection.driver_class=com.mysql.jdbc.Driver

hibernate.connection.url=jdbc:

mysql:

//localhost:

3306/hibernate?

useUnicode=true&characterEncoding=UTF-8

hibernate.connection.username=root

hibernate.connection.password=123456

hibernate.dialect=org.hibernate.dialect.MySQLDialect

hibernate.show_sql=true

hibernate.hbm2ddl.auto=create

#hibernate.c3p0.acquire_increment=10

#hibernate.c3p0.max_size=20

#hibernate.c3p0.min_size=1

#hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver

#hibernate.connection.url=jdbc:

oracle:

thin:

@localhost:

1521:

orcl

#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect

或者src目录下创建hibernate.cfg.xml(连接数据库)

xmlversion="1.0"?

>

DOCTYPEhibernate-configurationPUBLIC

"-//Hibernate/HibernateConfigurationDTD3.0//EN"

"

com.mysql.jdbc.Driver

jdbc:

mysql:

//localhost:

3306/hibernate

root

123456

org.hibernate.dialect.MySQLDialect

true

create

org.hibernate.connection.C3P0ConnectionProvider

--最大连接数-->

20

--最小连接数-->

5

--获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒-->

120

--最大的PreparedStatement的数量-->

100

--每隔120秒检查连接池里的空闲连接,单位是秒-->

120

--当连接池里面的连接用完的时候,C3P0一下获取的新的连接数-->

2

--每次都验证连接是否可用-->

true

3.创建pojo,User.java

packagecom.pojo;

importjava.util.Date;

publicclassUser{

privateIntegerid;

privateStringname;

privateIntegersex;

privateDatebirthday;

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicIntegergetSex(){

returnsex;

}

publicvoidsetSex(Integersex){

this.sex=sex;

}

publicDategetBirthday(){

returnbirthday;

}

publicvoidsetBirthday(Datebirthday){

this.birthday=birthday;

}

}

4.在pojo目录下,即同User类同目录下创建User.hbm.xml

xmlversion="1.0"?

>

DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

"http:

//www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

说明:

对上述User.hbm.xml:

(1)

Class标签指定该配置文件描述的实体类对象,name属性指定该实体类URL,table指定该文件描述的表名,schema表示该表所在的数据库用户名即只有该用户才可以操作该表;

dynamic-update(可选,默认为false):

指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改变过的字段(只更新修改的字段,没有修改的字段不进行更新)。

表结构很大,经常被修改,而只是经常修改少量字段,这样会提交效率,否则修改时会扫描所有列数据;

dynamic-insert(可选,默认为false):

指定用于INSERT的SQL将会在运行时动态生成,并且只包含那些非空值字段(在添加记录时,只添加非null的字段)。

lazy(可选):

通过设置lazy="false",所有的延迟加载(Lazyfetching)功能将被全部禁用(disabled)。

5.主方法

packagecom.test;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.Transaction;

importorg.hibernate.cfg.Configuration;

importorg.hibernate.service.ServiceRegistry;

importorg.hibernate.service.ServiceRegistryBuilder;

importcom.pojo.User;

publicclassContrastConfig{

/*

*创建数据库连接工厂

SessionFactory由Configuration对象根据当前的配置信息生成。

SessionFactory对象一旦构造完毕,即被赋予特定的配置信息。

注:

构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象。

(单例模式创建)

*/

publicstaticSessionFactorysessionFactory=null;

publicstaticvoidcreate(){

//1.加载hibernate.cfg.xml

Configurationconfiguration=newConfiguration().configure();

ServiceRegistryserviceRegistry=newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

//2.加载hibernate.properties

//ServiceRegistryserviceRegistry=newServiceRegistryBuilder().buildServiceRegistry();

configuration.addClass(User.class);

//读取并解析映射文件,创建SessionFactory

sessionFactory=configuration.buildSessionFactory(serviceRegistry);

//sessionFactory=configuration.buildSessionFactory();

}

static{

create();

}

publicstaticvoidmain(String[]args){

Sessionsession=null;

Transactiontransaction=null;

try{

//打开session

session=sessionFactory.openSession();

//开启事务

transaction=session.beginTransaction();

//持久化操作

//Exceptioninthread"main"org.hibernate.MappingException:

Unknownentity:

demo01.User

Useruser=newUser();

user.setName("xiaoming");

//Session对象有一个一级缓存,显式执行flush之前,所有的持久层操作的数据都缓存在session对象处。

//故,当缓存中已保存有相同的数据时,仅执行一次

session.save(user);

session.save(user);

//提交事务

mit();

//等价于jdbc中Connnectin.setAutoCommit(false);

}catch(Exceptione){

transaction.rollback();e.printStackTrace();

}finally{

//关闭session和sessionFactory

session.close();sessionFactory.close();

}

}

}

说明:

使用XML文件进行配置时,可以在当中指定对象与数据库表格的映像文件位置,hibernate.cfg.xml文件的位置必须在Classpath即src下面下。

对该xml的读取,可以通过:

Configurationconfig=newConfiguration().configure();

Configuration的实例管理Hibernate的配置信息,通常用于建立SessionFactory,例如:

SessionFactorysessionFactory=config.buildSessionFactory();

SessionFactory中包括了数据库配置及映射关系,它的建立相当复杂,所以使用时需考虑到重用已建立的SessionFactory实例,SessionFactory是被设计为「线程安全的」(Thread-safe)。

预设的XML配置文件名称是hibernate.cfg.xml,您也可以自行指定文件,例如:

Configurationconfig=newConfiguration().configure("db.cfg.xml");

SessionFactorysf=config.buildSessionFactory();

hibernate.hbm2ddl.auto

这个属性标签中有四个参数可以写,这四个参数是对数据库中插入的进行不同的操作,分别为:

(1)create-drop

(2)create

(3)update

(4)validate

下面分别来介绍他们的作用以及对数据库中的影响

(1)create-drop表示在hibernate初始化时创建表格,程序运行结束的时候(sessionFactory.close())会删除相应的表格,在实际项目中不用

(2)create在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格

(3)update只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构

(4)validate校验映射文件和数据库中的表是不是能对应起来,如果不一致报错例:

表不存在报错,因为表与ORM不一致

c3p0连接池hibernate.properties

hibernate.c3p0.acquire_increment=10

hibernate.c3p0.max_size=100

hibernate.c3p0.min_size=1

标签常用属性

name:

table:

dynamic-update:

(可选,默认为false)。

(1)对update以及当saveOrUpdate执行update时来说,无论为true还是false,其结果都是用setXXX和预设默认值(剩余用null)覆盖表中所有原有字段。

(2)对merge方法来说,首先执行select语句查询数据库,如果值发生改变:

为true时,update语句只显示更新被更改的字段;为false时,update语句显示更新表中所有字段。

但结果都是用setXXX和预设默认值(剩余用null)覆盖表中所有原有字段。

(3)对Useru=(User)session.load(User.class,1);u.setName("John");mit();来说只执行不仅setXXX且被更改过的字段的update语句,如果setXXX但值没改变,则不执行update语句。

dynamic-insert:

(可选,默认为false),默认插入所有字段。

对save以及当saveOrUpdate和persist执行insert时来说:

为true时,指定用于insert的sql将会在运行时动态生成,并且只插入setXXX和预设默认值的那些非空字段,和生成的insert语句的字段相同。

反之,则insert所有字段。

lazy(可选):

通过设置lazy="false",所有的延迟加载(Lazyfetching)功能将被全部禁用(disabled)

④主键

selectmax(id)fromtable;

适用范围:

1.由于不依赖与底层数据库,适合所有的数据库系统。

2.多线程下不推荐适用。

3.OID必须为long、int或short类型,如果把OID定义为byte类型,抛异常。

由Hibernate从数据库中取出主键的最大值(每个sessio

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2