2023年hibernate知识点详解_第1页
2023年hibernate知识点详解_第2页
2023年hibernate知识点详解_第3页
2023年hibernate知识点详解_第4页
2023年hibernate知识点详解_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1框架介绍

2回顾

2.1JDBC

Jdbc

〃1注册出动“〃

Class,forName(*com.nysql.jdbc.Driver");

//2获得连接

java.sql.Connectionconn=DriverManager.getConnection(url,user,password)

*url请求路径(设置数据库)

jdbc:nrysql://localhost:3305/数括库名称

*user数据库账号

*password密码

//3处理sql语句Statement、PrepsreStatement

PrepareStatementpsrot=conn.preparedStatement("select*froint_userwhereuserid=?")

insertintot_user(userid,username,password)values(?,?,?)

//4设置实际参数

psRt.setString(1,"uOOl")

1/5执行

ResultSetrs=psmt.executeQuery0;〃执行查询DQL(数据查询语言)

intr=psmt.executeUpdateO;/施行增删改DHL(数据榛纵语言)

2.2DBUtils

3ORM框架

ORM,册

对象关系映射(英语:ObjectRelationalMapping,简称ORM,或O/RM,s^O/Rmapping),是一种程序技术,用于实

现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的-虚拟对象数据

库一。

hibernate就是一个ORM框架

4hibernate介绍

版木:hibernate-distribution-3.6.lO.Fina1—dist

4.1分析

t_user表(关系)

hibernate框架

m

hlibe

驱fg.核儿包置文件

动at

*名

*接

*户username

*玛

*言

映射

User.hbro.xml

<classname="cn・itcast・User“table=^t_uscrv>

…映射

'>;Book.hbro.xml

I

4.2什么是hibernate

•Hibernale是轻量级JavaEE起用的持久层解决方案,是一个关系数据库ORM框架

轻量级:使用hibernatc较少的依赖hibernate框架,只使用少量的api进行操作。

•Hibemale提供了对关系型数据库增删改查操作

•流行数据库框架

1JPAJavaPersistenceAPLJPA通过JDK5.()注解或XML描述对象一关系表的映射关系(只有接口规

范)

gsun对ORM框架推出一个规范(接口,没有实现),hibernatc支持jpa

,2Hibemale最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL

。3MyBads本是apache的一个开源项目iBatis,支持普通SQL查询,存储过程和高级映射的优秀持

久层框架

4ApacheDBUtils、SpringJDBCTemplate

4.3优点

为什么要使用Hibernate

•Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据

访问层繁琐的重复性代码

•Hibernate是一个基于jdX的主流持久化框架,是一个优秀的QWX)

实现,它很大程度的简化了da。层编码工作

•Hibemate使用java的反射机制

•Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵

活性很出色。它支持很多关系型数据库,从一对一到多对多的各

种复杂关系

5he1loworld(重要)

5.1编写流程

•导入jar包

•核心配置文献:hibernaie.cfg.xml

•java对象:javabean

•映射文献:*.hbm.xml

。需要将hbm.xm1映射文献添加到核心配置hibernate.cfg.xml中

•操作api,进行添加操作:save

5.2导入jar包

jar►ssh,hibernate-distribution-3.6.10.Final►

i►hibernate-distribution-3.6.10.Final►lib►

fc(H)

刻录新建文件夹

帮助(H)

名称惨改日期

刻录新建文咛夹

Xdocumentation2012/2/81£

lib2012/2/81«名称修改日期

project2012/2/8li

2012/2/8U

手2012/2/8

hibernateloqo.qif2012/2/8If

两个文件夹中的所有2012/2/8

hibemate3.jar2012/2/8

Whibernate-testing.jar2012/2/81«2012/2/8

.Igpl-txt2012/2/8If2012/2/8

■0叱

包antlr-2.7.6.jarhibernate将HQL语句解析成SQL

幅commons-collections-3.1.jarjdk集合增强包

但dom4j-1.6.1.jar解析xm戳置文件

ahibernate-jpa-2.0-api-1.0.1.Final.jarsun提供规范

鼠hibernate3jar核心ja包

域javassist-3.12Q.GA.jar用于生成代理类(字节码增强)工具包

也jta-l.l.jarjavatransactionapi,java事务叩i(分布式事务管理)

.mysql-connector-java-5.1.28-bin.jar数据库mysq驱动

的slf4j-api-1.6.1.jar日志框架

—4b

5.3核心配置文献

•位置:src

•名称:hibemate.cfg.xmi

•约束:

u_hibernate3.jar\org\hibernate-ZIP压缩文件解包大4

名称O

g)FlushMode,class

j]hibernate-configuration-3.0.dtd

j]hibernate-mapping-3.0.dtd

J凶hibernate.cfg.xml但hibernate-configuration-3.0.dtd

1-<!--Hibernatefile-basedconfigurationdocument.

2

3<!DOCTYPEJiibernate-configurationPUBLIC

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

5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

6

<!DOCTYPEhibernate-configurationPUBLIC

//Hibernate/HibernateConfigurationDTD3.0//EN"

“http://www.hibernate.org/dtd/hibernate-configuration-

3.O.dtd">

•正文内容

<?xmlversion=Ml.0nencoding=Mt/7F-<^"?>

<!DOCTYPEhibemate-configurationPUBLIC

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

"http://www.hibernate.org/dtd/hibernate-configuration-3.

0.dtd">

<hibernate-con-Figuration>

o<session-factory>

。<!--#1基本4项

*注意:必须手动创建数据库,createdatabaseh_day01;

0——

o®<propertyname="力iber”ate.connection.driver_cLass">com.mysq

1.jdbc.Driver</property>

«><propertyname=11hibernate,connection.urL">jdbc:mysq1://localh

ost:3306/h_day01</property>

«<propertyname="h/bemate,connection.usernamen>root</pro

perty>

oo<propertyname=',hibernate.connection.password”>1234</propert

y>

。<!--#2方言-->

。。<propertyname=11hibernate.diaLect">org.hibemate,dialect.MyS

QL5Dia1ect</property>

30

。<!--#3自动创建表

一*假如表不存在,抛异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxE

rrorException:Tab1e'h_day01.t—book'doesn'texist

00一一〉

。<propertyname=Hhibernate.hbm2dd1.auto”>update</property>

<!--添加映射文献一》

。<mappingresource=ucn/itcost/a_heLLo/Book.hbm.xmL"/>

00

J</session-factory>

V/hibernate-configuration>

5.4java对象:JavaBean

packagecn.itcast.a_hello;

publicclassBook{

privateIntegerbid;。//注意:类型必须是整形

privateStringtitle;

privateStringauthor;

5.5映射文献

•位置:和javabean同包

・名称:Book.hbm.xm1

•约束:

xhibernate.cfg.xml团Bookjava区)Book.hbm.xml@hibernate-mapping-3.0.dtd^3

1■<!--HibernateMappingDTD.

2

3<!DOCTYPEhibernate-mappingPUBLIC

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

5"http://www.hibernate.Org/dtd/hibRrnate-mapping-3.0.dtcT>

<!DOCTYPEhibernate—mappingPl)BLIC

//Hib/rnate/HibernateMappingDTD3.0//EN"

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

•E文内容:

<?xmlversion="1.0"encoding="UTF—SM?>

<!DCX2TYPEhibernate-mappingPUBLIC

"-//Hibernate/HibemateMappingDTD3.0//ENn

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

<hibernate-mapping>

。〈classname=Hcn.itcast.a_he11o.Book'12345table=Ht_book">

ooV!・一用于配置数据库中表的主键的・一>

。<idname="bid">

。<!--固定值一)

。。<generatorclass="native"></generator>

。</id>

<!--其他属性配置一一>

。。<propertyname="tit1e"></property>

<propertyname="author">V/property>

</c1ass>

</hibernate-mapping>

•注意:

将映射文献添加到核心配置文献(hibemate.cfg.xm1)中

<!一添加映射文献一)

Vmappingresource="cn/itcast/ahelLo/Booh.hbm.xm/"/>

5.6操作api

@Test

。pub1icvoiddemo01(){

Bookbook=newBook();〃注意:必须要手动bid的值

obook.setTitle(“宝典”);

0book.setAuthor("关系");

0

0

。//I加载核心配置文献

。Configurationconfig=newConfiguration().configure();

。〃2获得sessionFactory,相称于连接池

。SessionFactoryfactory=config.bui1dSessionFactory();

。//3获得session,相称于idbc连接

。Sessionsession=factory.opensession();

。//4启动事务

Transactiontransact!on=session.beginTrans

action();

00

。。//操作:添加

。session.save(book);

//5提交或回滚commit()Irol1back()

6otransaction,commit();

。//6释放资源

oosession.c1ose();

factory.close();

}

6整合日记1og4j

6-1java项目提醒

底Problems[■:WebBrowserConsole渝Servers')飞Progress]网JUnit|■X%|Ini

<terminated>TestApp.demoOl[JUnit]D:\iava\jdk\jdkl.7.0_04\bin\javaw.exe(2015-2-27上午10:39:06)

SLF43:Failedtoloadclass"org.slf4j.impl.StaticLoggerBinder".

SLF4J:Defaultingtono-operation(NOP)loggerimplementation

SLF4J:Seehttp://www.slf4j.org/codes.html#StaticLoggerBinderforfurtherdetails.

•日记没有生效

6.2日记框架介绍

6.3整合Iog4j

•log4j核心jar

•过滤jar

•log4j核心配置文献

注意:只需要添加文献,不需要读懂内容,之后讲解。

§slf4j-1.7.5.zip-WinRAR

文件(F)命令(C)IM(S)收藏夫(0)选项(N)帮助(H)

§logq-1.2.17.zip-WinRAR

由文件(F)命令(QTM(S)物多善嗡出愉胭《

添加解压到测试查看删除查找

:;睿困嗡国港slf4j-1.7.5.zip\slf4j-1.7.5-ZIP压缩文伟解包大小3

;lf激口解庭I」蜘

名称O

图9Iog4j-1.2.17.zip\a

|1>1slf4j-jd-1.7.5jar

名称Q

修Islf4j-jdkl4-1.7.5-sources.jar

srcI<>jslf4j-jdkl4-1.7.5.iar

tests国slf4j-log4jl2-1.7.5-sources.jar过遐ja能源码

*Iog4j-1.2.17.jar

3slf4j-log4jl2-1.7.5.jar

囱perties.sample(*>Jslf4j-migrator-1.7.5.jar

/Ic7hibernate_day01

/0src

田cn.itcast.a_hello

Qhibernate.cfg.xml

t>loiocommons-collections-3.1.jar

t>§dom4j-1.6.1.jar

t>oiihibernate-jpa-2.0-api-1.0.1.FinalJar

>@hibernate3.jar

逅javassist-3.12.0.GA.jar

>§jta-l.l.jar

t>遍mysql-connector-java-5.1.28-binjar

t>@slf4j-api-1.6.1.jar

t>昼Iog4j-1.2.17.jar

»@slf4j-log4jl2-1.7.5.jar

三川向■-----------------------

.〜i:i_

7CURD操作

7.1添加

。@Test

«publicvoiddemo01(){

。//添加

Bookbook=newBook();〃注意:必须要手动bid的值

。book.setTitle("宝典,,);

abook.setAuthor("关系");

0

6//I加载核心配置文献

Configurationconfig=newConfiguration().configure

();

//2获得sessionFact。ry,相称于连接池

。SessionFactoryfactory=config.bui1dSessionFactory();

//3获得session,相称于[dbc连接

。。SRSSi。nsession=factory.openSession();

。。//4启动事务

。Transactiontransaction=session,beginTransaction();

00

。//操作:添加

session.save(book);

。//5提交或回滚commit()|rollback()

。transaction.commit();

。。//6释放资源

。session.close();

。。factory,close();

。}

7.2更新

@Test

publicvoiddemo02(){

//更新bid=3葵加

。Bookbook=newBook();

。book.setBid(3);

。book.setTitle("葵花");

。Configurationconfig=newConfiguration().configure();

。。SessionFactoryfactory=config.buildSessionFactory();

oSessionsession=factory.openSession();

Transact!ontransaction=session.beginTransaction();

//操作

osession.update(book);〃通过id更新所有的数据,假如没TF设立值,将更新

默认值

«transaction.commit();

。。session.c1ose();

oofactory,close();

}

7.3删除

@Test

®publicvoiddemo03(){

//删除bid=2

。Bookbook=newBook();

oobook.setBid(2);

。Configurationconfig=newConfiguration().configure();

。SessionFactoryfactory=config.bui1dSessionFactory();

Sessionsession=factory.openSession();

oTransactiontransaction=session.beginTransaction();

。〃删除,通过id删除

。session.de1ete(book);

transaction.commit();

s。session.close();

。。factory.close();

0

0}

7.4通过id查询

@Test

。publicvoiddemo04(){

。6//通过bid=4

。。Integerbid=4;

。Configurationconfig=newConfiguration().configure();

®®SessionFactoryfactory=config,bui1dSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

0

。。//通过id查询

ooBookbook=(Book)session,get(Book.class,bid);

。System.out.println(book);

00

。transact!omit();

o®session.close();

factory.c1ose();

3}

7.5查询所有

@Test

pub1icvoiddemo35(){

。//查询所有

。。Configurationconfig=newConfiguration().configure();

。SessionFactoryfactory=config.bui1dSessionFactory();

◎Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransact

ion();

00

。〃需要hibernate提供也1语句进行查询

*hq1:hibernatequery1anguage查询语言,面向对象的查询语言,类似

与sql语句。

。。〃*sq1语句查询所有:se1ect*fromt_book--sql语句使用的表

。。//*也1语句查询所有:fromBook。。。--hq1语句使用的对象

oQueryquery=session.ereateQuery("fromBook");

6oList<Book>a11Book=query.1ist();

0

»for(Bookbook:a1iBook){

®System.oi/1.printIn(book);

°}

0

3transaction.commit();

。session.close();

。factory.close();

7.6分页查询

@Test

opublicvoiddemo06(){

°〃分页杳询

。//*sq1语句分页:select*fromt_book1imit?,?

。。//*开始索引:start工ndex,从0开始。算法:startindex=(pageNum-1)

pageSize

o。//*每页显示个数:pageSize

。Configurationconfig=newConfiguration().configure();

。SessionFactoryfactory=config.buildSessionFactory();

。Sessionsession=factory.openSession();

doTransactiontransaction=session.beginTnansaction();

。//分页,在查询所有基础I-.

。Queryquery=session.createQuery(HfromBook");

60//###第一页

。//*设立开始索引

。。//query.setFirstResult(0);

-//*设立每页显示个数

。。//query.setMaxResu1ts(2);

。〃###第二页

//*设立开始索引

^query.setFirstResult(2);//(2—1)*2

。。〃*设立每页显示个数

。query.setMaxResu1ts(2);

0

List<Book>a11Book=querv.lis[();

for(Bookbook:a1IBook){

。。System.out.print1n(book);

6}

00

«>otransaction.commit。;

。session,close();

oofactory.close();

0

8api详解

8.1体系结构

O

java应用程月

Application

PersistentObjects

P。;持久对象--------

HIEMATE

XMLMapping

properties

*新版本使用xml/

hibernate.cfg.xml/

Database

VO:Valueobject,值对象,使用在web®,用于显示数据。

boibusii心sobjccl,业务对象,使用在servi。e层,根据不同页面封装对象,也许包含多个PO。

po:persistentobject,持久对象,与数据库进行数据交互的。

一般情况使用Javabean将三个对象统一。

8.2Configuration对象

8.2.1构造

newConfiguration();

•月于加载src下的hibernale.properties文献,此文献为hibernate老版本中的核心配置文献,但现在

已经不使用。

内容:Properties中key=value方式

。例如:/libernote.connection.driver_cLass=com.mysq1.jdbc.Driver

•hibernate提供参考文献

4%hiberante%/project/etc/hibernate.properties

►hibernate-distribution-3.6.10.Final►project►etc

帮助(H)

刻录新建文件夹

宜1

名称修改日期

CacheSequences.xml2012/2/818:26XMI

,cvs-dup-eol-fixer2012/2/818:26文件

ehcache.xml2012/2/818:26XMI

hihArn^tArf5Mmi2012/2/818:26XMI

flperties2014/6/1715:29PRC

LJ

8.2.2方法

•核心配置文献

//1.1加载核心方n]配置文件

config.configure();加载的src下,hibemate.cfg.xml

jp.java团hibernate.cfg.xmlRConfiguration.class眼

*/

publicConfigurationconfigure()throwsHibernateException{

configure("/hibernate.cfg.xml");

returnthis;

S「C下的文件,名称固定

}

configured/资源文献途径”),加载指定目录下的资源文献

•映射文献

//*加载指定类目录下的hbm.xml文件

config.addClass(Book.class);

publicConfiguration|addCla^^ClasspersistentClass)throwsMappingException{

StringmappingResourceName=persistentClass.getName().replace('.','/')+".hbm.xml";

Log.info("Readingmappingsfromresource:"+mappingResourceName);

returnaddResource(mappingResourceName,persistentClass.getClassLoader());

)getWame。->cnitcast.a_helo.Book(全限定类名)

replace替拯cn^rtca$t/a_helo/Book

固定字符由hbm.xrri->cn/itca$t/a_helo/8ook.hbm.xmi

*Readmetadatafromtheannotationsassociatedwiththisclass.

hbm.xml后缀固定的,必须与javabean同包。

addResource("xml文献")加载指定位置的映射文献

<!--添加映射文件

<mappingresource="cn/itcast/ahello/Book.hbm.xml"/>

核心配置加载时,hibemale将执行addResource加载配置的映射文献

8.2.3总结

开发中,必须将hbm.xml配置到hibernate.cfg.xml文献中

学习中,使用addClass加载执行类的hbm.xml文献,简化配置操作。

8.3SessionFactory对象

•SessionFactory相称于连接池,可以提供操作数据的Session对象。

•SessionFactory是线程安全,及不同的线程都可以使用。且可以保存,不同的线程获得session必须不

同。

8.3.1获得方式

SessionFactoryfactory=config.buiIdSessionFactory();

8.3.2方法

//3.1获得一个新的session,每执行一次openSession()将获得一个新的s

ession

Sessionsession=factory.openSession();

〃3.2获得当前线程中绑定的session,同一个线程共享一个sessi。n

//*注意:默认情况下不能使用,必须进行配置(暂时不用)

Sessionsession2=factory.getCurrentSession();

8.3.3工具类

pub1icclassH3Utils{

o

。//获得SessionFactory。相称于连接池,只有■—个

oprivatestaticSessionFactoryfactory;

ostatic{

sory=newConfiguration().configure().bui1dSe

ssionFactory();

。)

3/女*

o*获得一个新的session

。*@return

*/

publicstaticSessionopenSession(){

oreturnfactory.o[)enSession();

°}

/**

火获得线程中绑定的session

o*@return

3*/

publicstaticSessiongetCurrentSession(){

◎returnfactory.getCurrentSession();

)

}

8.4Session对象

•相称于JDBC的连接Connection,用于操作PO(持久)对象

•session线程不安全的,及不同的线程必须使用不同的session。

♦常用方法:

save:将指定PO保存数据库,底层将触发一条insert语句。

persist是jpa提供的保存对象的方法,与savc等效的。

。updale:通过id更新所有的数据,底层将触发一条update语句。

savcOrUpdatc:假如没有id值,将执行save及insert语句。

假如有id值,将执行update及update语句。

deIctc:通过id删除

get:通过id查询对象,立即查询,当执行get方法之后,立即触发seleci语句。假如没芍查询到,返回

null

load:通过id查询对象,延迟查询,当执行I。ad方法之后,不触发select语句,直到使用了查询对象

的具体的数据时,才触发select语句。假如没有查询到,将抛异常。

&createQuery:执行HQL语句

ereateSQLQuery:执行sq1语句

crcatcCritcria:hibernate提供QBC语句。(不研究)

snerge:与save0rUpdale非常相似,假如没有id值将执行inserl语句

假如有id值,将执行seiect语句,假如数据没有变化,将不触发任何语句。

。。。假如数据变化了,将触发updale语句。

8.5事务transaction对象

•启动事务:session.bcginTransaction();

•提交事务:lransactimit();

■回滚事务:transaction.rollback();

•获得当前事务:session.geiTransaction();

//启动

session.beginTransaction();

〃获得当前事务并提交

session.getTransaction().commit();

9核心配置文献详解

•位置:src

•名称:hibernate.cfg.xml

9.1创建数据基本配置

##MySQL

#hibernate.dialectorg.hibemate.diaIect.MySQL5DiaIect

#hibemate.connection.driver_cIasscom.niysqI.jdbc.Driver

#hibernate.connection.urljdbc:mysql://locaIhost:3306/test

#hibernate.connection.usernamegavin

#hibernate.connection.password

##0raclc

#hibernate.dialectorg.hibernate.diaIect.Oracle8iDiaIect

#hibernate.dialectorg.hibernate.dialect.OracIe9iDiaIect

#hibernate.dialectorg.hibemate.dialect.Oracle1OgDia1ect

#hibernate.connection.driver_classoracle.jdbc.driver.OradeDriver

#hibernate.connection.usemameora

#hibemate,conncction.passwordora

#hibcmate.connection.utijdbc:oraclc:thin:@localhost:l521:orc1

9.2内容

<?xmlversion-7.0"encoding="UTF-8”?>

<!DOCTYPEhibernate-configurationPUBLIC

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

。“http://www.hibernate.org/dtd/hibernate-configuration-3.0,dtd

>

<hibernate-configuration>

®<session-factory>

。<!--#1基本4项

。。。*注意:必须手动创建数据库,createdatabaseh_day01;

3-——>

<propertyname=11hibernate.connection.driver_cLass">c

om.mysql.jdbc.Driver</property>

。<propertyname=uhibemate.connection.urLn>jdbc:mysq1:/

/locaIhost:3306/h_day01</property>

。〈propertyname=n/7ibernote.connection.username">root</propert

y>

3<propertynam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论