Hibernate个人学习笔记Word文档格式.docx

上传人:b****5 文档编号:21339601 上传时间:2023-01-29 格式:DOCX 页数:51 大小:272.45KB
下载 相关 举报
Hibernate个人学习笔记Word文档格式.docx_第1页
第1页 / 共51页
Hibernate个人学习笔记Word文档格式.docx_第2页
第2页 / 共51页
Hibernate个人学习笔记Word文档格式.docx_第3页
第3页 / 共51页
Hibernate个人学习笔记Word文档格式.docx_第4页
第4页 / 共51页
Hibernate个人学习笔记Word文档格式.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

Hibernate个人学习笔记Word文档格式.docx

《Hibernate个人学习笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《Hibernate个人学习笔记Word文档格式.docx(51页珍藏版)》请在冰豆网上搜索。

Hibernate个人学习笔记Word文档格式.docx

1.1、Hibernate_first创建步骤

1、新建java项目

2、创建UserLibrary,加入如下jar

*HIBERNATE_HOME/hibernate3.jar

*HIBERNATE_HOME/lib/*.jar

*MySqljdbc驱动

3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件

位于:

hibernate-3.2\etc目录下

4、定义实体类User.java

5、定义User类的映射文件User.hbm.xml

<

hibernate-mapping>

<

classname="

com.tongji.hibernate.User"

>

<

idname="

id"

>

<

generatorclass="

uuid"

/>

/id>

propertyname="

name"

password"

createDate"

expireDate"

/class>

/hibernate-mapping>

6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中

mappingresource="

com/tongji/hibernate/User.hbm.xml"

7、编写hbm2ddl工具类:

ExportDB.java将实体类→生成数据库表

publicstaticvoidmain(String[]args){

//读取hibernate.cfg.xml文件

Configurationcfg=newConfiguration().configure();

SchemaExportexport=newSchemaExport(cfg);

export.create(true,true);

}

8、开发客户端Client.java

为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入

hibernate.show_sql"

true<

/property>

publicstaticvoidmain(String[]args){

//创建SessionFactory

SessionFactorysf=cfg.buildSessionFactory();

Sessionsession=null;

try{

session=sf.openSession();

//开启事务

session.beginTransaction();

Useruser=newUser();

user.setPassword("

jbjb"

);

user.setName("

不得了"

user.setCreateDate(newDate());

user.setExpireDate(newDate());

//保存数据

session.save(user);

//提交事务

session.getTransaction().commit();

}catch(Exceptione){

e.printStackTrace();

//回滚事务

session.getTransaction().rollback();

}finally{

if(session!

=null){

if(session.isOpen()){

//closesession

session.close();

}

}

}

}

1.2、步骤总结

实体类(持久化类)的设计

实体类与关系数据库的映射

应用的开发

1.3、Hibernate核心接口

1.3.1Configuration

Ø

概述:

Configuration类负责管理Hibernate的配置信息。

它包括如下内容:

❑Hibernate运行的底层信息:

数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。

❑Hibernate映射文件(*.hbm.xml)。

Hibernate配置的两种方法:

❑属性文件(hibernate.properties)。

①调用代码:

Configurationcfg=newConfiguration();

❑xml文件(hibernate.cfg.xml)。

②调用代码:

Configurationcfg=newConfiguration().configure();

<

hibernate-configuration>

session-factory>

hibernate.connection.driver_class"

com.mysql.jdbc.Driver

hibernate.connection.url"

jdbc:

mysql:

//localhost/hibernate_first

hibernate.connection.username"

Root

hibernate.connection.password"

hibernate.dialect"

Org.hibernate.dialect.MySQLDialect

/session-factory>

/hibernate-configuration>

1.3.2SessionFactory

应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。

它在多个应用线程间进行共享。

通常情况下,是线程安全的,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。

然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。

会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。

他的创建很耗时的,通常放在一个静态方法里面只创建一次

static{

try{

Configurationcfg=newConfiguration().configure();

factory=cfg.buildSessionFactory();

}catch(Exceptione){

e.printStackTrace();

调用代码:

SessionFactorysessionFactory=cfg.buildSessionFactory();

说明:

SessionFactory由Configuration对象创建,所以每个Hibernate配置文件,实际上是对SessionFactory的配置

1.3.3Session(会话)

❑Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。

❑Session也称为持久化管理器,因为它是与持久化有关的操作接口。

❑Session通过SessionFactory打开,在所有的工作完成后,需要关闭。

❑它与Web层的HttpSession没有任何关系。

调用代码

Sessionsession=sessionFactory.openSession();

2.测试实体对象的生命周期

2.1junit简介:

*编写测试类xxxTest,需要继承TestCase

*编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:

publicvoidtestHello1(){}

*最好单元测试的代码单独建立一个目录

2.2了解Hibernate中CRUD操作

publicclassSessionTestextendsTestCase{

publicvoidtestSave1(){

Transactiontx=null;

Useruser=null;

try{

session=HibernateUtils.getSession();

tx=session.beginTransaction();

//Transient状态

user=newUser();

李四"

123"

user.setCreateTime(newDate());

user.setExpireTime(newDate());

//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步

王五"

//session.update(user);

mit();

}catch(Exceptione){

tx.rollback();

}finally{

HibernateUtils.closeSession(session);

//detached状态

user.setName("

张三"

//persistent状态

session.update(user);

publicvoidtestReadByGetMethod1(){

//马上发出查询sql,加载User对象

Useruser=(User)session.get(User.class,"

402880d01b9bf210011b9bf2a2ff0001"

System.out.println("

user.name="

+user.getName());

龙哥"

publicvoidtestReadByGetMethod2(){

//采用get加载数据,如果数据库中不存在相应的数据,返回null

asdfsafsdfdsf"

publicvoidtestReadByLoadMethod1(){

//不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)

//延迟加载:

只有真正使用这个对象的时候,才加载(发出sql语句)

//hibernate延迟加载实现原理是代理方式

Useruser=(User)session.load(User.class,"

发哥"

publicvoidtestReadByLoadMethod2(){

//采用load加载数据,如果数据库中没有相应的数据

//那么抛出ObjectNotFoundException

55555555"

System.out.println(user.getName());

publicvoidtestUpdate1(){

//手动构造的detached状态的对象

user.setId("

402880d01b9be8dc011b9be9b23d0001"

德华"

}

publicvoidtestDelete1(){

////手动构造的detached状态的对象

//Useruser=newUser();

//user.setId("

//user.setName("

//session.delete(user);

session.delete(user);

2.3了解get和load的区别?

*get不支持lazy,load支持lazy

*采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常

2.4Transient、persisten、detached的状态特征

transient状态的特征?

*在数据库中没有与之匹配的数据

*没有纳入session的管理

persistent状态的特征?

*persistent状态,当属性发生改变的时候,Hibernate会自动和数据库同步库

数据库中有与之匹配的数据

*纳入了session的管理

*在清理缓存(脏数据检查)的时候,会和数据库同步

detached状态的特征?

*在数据库中有与之匹配的数据

*没有纳入session的管理

2.5QueryTest

publicvoidtestQuery(){

Transactiontx=session.beginTransaction();

Queryquery=session.createQuery("

fromUser"

query.setFirstResult(0);

query.setMaxResults

(2);

ListuserList=query.list();

for(Iterator<

User>

iterator=userList.iterator();

iterator.hasNext();

){

Useruser=(User)iterator.next();

System.out.println(user.getId());

System.out.println(user.getName());

}

3、Hibernate基本映射

3.1映射关系

实体类---表

实体类中的普通属性---表字段

采用<

class>

标签映射成数据库表,通过<

id>

、<

property>

标签将普通属性映射成表字段

所谓普通属性指不包括自定义类、集合和数组等

注意:

如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名

3.2实体类的设计原则

*实现一个默认的(即无参数的)构造方法(constructor)

*提供一个标识属性(identifierproperty)(可选)

*使用非final的类(可选),final之后就不能继承了

*为持久化字段声明访问器(accessors)get、set方法

3.3主键生成策略:

uuid、native和assigned

uuid

用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址)。

UUID被编码为一个32位16进制数字的字符串。

native

根据底层数据库的能力选择identity,sequence或者hilo中的一个。

assigned

让应用程序在save()之前为对象分配一个标示符。

这是<

generator>

元素没有指定时的默认生成策略。

主键这个时候必须手动分配

4.hibernate多对一关联映射

4.1多对一关联映射的本质:

*将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用,多个用户(user)属于一个组(group)

many-to-one>

会在多的一端加入一个外键,指向一的一端,这个外键是由<

中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致

publicclassUser{

privateintid;

privateStringname;

privateGroupgroup;

标签的定义示例:

*<

many-to-onename="

group"

column="

groupid"

many-to-one的映射最常用,也是最容易理解和编写的

column=“groupid”/>

生成的DDL语句如下

createtableT_Group(idvarchar(255)notnull,namevarchar(255),primarykey(id))

createtableUser(idvarchar(255)notnull,namevarchar(255),passwordvarchar(255),createTimedatetime,expireTimedatetime,groupidvarchar(255

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

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1