hibernate知识点详解王成敏.docx

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

hibernate知识点详解王成敏.docx

《hibernate知识点详解王成敏.docx》由会员分享,可在线阅读,更多相关《hibernate知识点详解王成敏.docx(89页珍藏版)》请在冰点文库上搜索。

hibernate知识点详解王成敏.docx

hibernate知识点详解王成敏

1框架介绍

2回顾

2.1JDBC

2.2DBUtils

3ORM框架

●hibernate就是一个ORM框架

4hibernate介绍

●版本:

hibernate-distribution-3.6.10.Final-dist

4.1分析

4.2什么是hibernate

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

轻量级:

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

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

●流行数据库框架

1JPAJavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系(只有接口规范)

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

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

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

4ApacheDBUtils、SpringJDBCTemplate

4.3优点

5helloworld(重要)

5.1编写流程

●导入jar包

●核心配置文件:

hibernate.cfg.xml

●java对象:

javabean

●映射文件:

*.hbm.xml

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

●操作api,进行添加操作:

save

5.2导入jar包

5.3核心配置文件

●位置:

src

●名称:

hibernate.cfg.xml

●约束:

DOCTYPEhibernate-configurationPUBLIC

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

"http:

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

●正文内容

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-configurationPUBLIC

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

"http:

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

--#1基本4项

*注意:

必须手动创建数据库,createdatabaseh_day01;

-->

com.mysql.jdbc.Driver

jdbc:

mysql:

//localhost:

3306/h_day01

root

1234

--#2方言-->

org.hibernate.dialect.MySQL5Dialect

--#3自动创建表

*如果表不存在,抛异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

Table'h_day01.t_book'doesn'texist

-->

update

--添加映射文件-->

5.4java对象:

JavaBean

packagecn.itcast.a_hello;

publicclassBook{

privateIntegerbid;//注意:

类型必须是整形

privateStringtitle;

privateStringauthor;

5.5映射文件

●位置:

和javabean同包

●名称:

Book.hbm.xml

●约束:

DOCTYPEhibernate-mappingPUBLIC

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

"http:

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

●正文内容:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC

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

"http:

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

--用于配置数据库中表的主键的-->

--固定值-->

--其他属性配置-->

●注意:

将映射文件添加到核心配置文件(hibernate.cfg.xml)中

--添加映射文件-->

5.6操作api

@Test

publicvoiddemo01(){

Bookbook=newBook();//注意:

必须要手动bid的值

book.setTitle("宝典");

book.setAuthor("关系");

//1加载核心配置文件

Configurationconfig=newConfiguration().configure();

//2获得sessionFactory,相当于连接池

SessionFactoryfactory=config.buildSessionFactory();

//3获得session,相当于jdbc连接

Sessionsession=factory.openSession();

//4开启事务

Transactiontransaction=session.beginTransaction();

//操作:

添加

session.save(book);

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

mit();

//6释放资源

session.close();

factory.close();

}

6整合日志log4j

6.1java项目提示

●日志没有生效

6.2日志框架介绍

6.3整合log4j

●log4j核心jar

●过滤jar

●log4j核心配置文件

注意:

只需要添加文件,不需要读懂内容,之后讲解。

7CURD操作

7.1添加

@Test

publicvoiddemo01(){

//添加

Bookbook=newBook();//注意:

必须要手动bid的值

book.setTitle("宝典");

book.setAuthor("关系");

//1加载核心配置文件

Configurationconfig=newConfiguration().configure();

//2获得sessionFactory,相当于连接池

SessionFactoryfactory=config.buildSessionFactory();

//3获得session,相当于jdbc连接

Sessionsession=factory.openSession();

//4开启事务

Transactiontransaction=session.beginTransaction();

//操作:

添加

session.save(book);

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

mit();

//6释放资源

session.close();

factory.close();

}

7.2更新

@Test

publicvoiddemo02(){

//更新bid=3title=葵花

Bookbook=newBook();

book.setBid(3);

book.setTitle("葵花");

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//操作

session.update(book);//通过id更新所有的数据,如果没有设置值,将更新默认值

mit();

session.close();

factory.close();

}

7.3删除

@Test

publicvoiddemo03(){

//删除bid=2

Bookbook=newBook();

book.setBid

(2);

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//删除,通过id删除

session.delete(book);

mit();

session.close();

factory.close();

}

7.4通过id查询

@Test

publicvoiddemo04(){

//通过bid=4

Integerbid=4;

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//通过id查询

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

System.out.println(book);

mit();

session.close();

factory.close();

}

7.5查询所有

@Test

publicvoiddemo05(){

//查询所有

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//需要hibernate提供hql语句进行查询

//*hql:

hibernatequerylanguage查询语言,面向对象的查询语言,类似与sql语句。

//*sql语句查询所有:

select*fromt_book--sql语句使用的表

//*hql语句查询所有:

fromBook--hql语句使用的对象

Queryquery=session.createQuery("fromBook");

ListallBook=query.list();

for(Bookbook:

allBook){

System.out.println(book);

}

mit();

session.close();

factory.close();

}

7.6分页查询

@Test

publicvoiddemo06(){

//分页查询

//*sql语句分页:

select*fromt_booklimit?

?

//*开始索引:

startIndex,从0开始。

算法:

startIndex=(pageNum-1)*pageSize

//*每页显示个数:

pageSize

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//分页,在查询所有基础上

Queryquery=session.createQuery("fromBook");

//###第一页

//*设置开始索引

//query.setFirstResult(0);

//*设置每页显示个数

//query.setMaxResults

(2);

//###第二页

//*设置开始索引

query.setFirstResult

(2);//(2-1)*2

//*设置每页显示个数

query.setMaxResults

(2);

ListallBook=query.list();

for(Bookbook:

allBook){

System.out.println(book);

}

mit();

session.close();

factory.close();

}

8api详解

8.1体系结构

vo:

valueobject,值对象,使用在web层,用于显示数据。

bo:

businessobject,业务对象,使用在service层,根据不同页面封装对象,可能包含多个PO。

po:

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

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

8.2Configuration对象

8.2.1构造

●用于加载src下的hibernate.properties文件,此文件为hibernate老版本中的核心配置文件,但现在已经不使用。

内容:

properties中key=value方式

例如:

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

●hibernate提供参考文件

%hiberante%/project/etc/hibernate.properties

8.2.2方法

●核心配置文件

,加载的src下,hibernate.cfg.xml

configure("/资源文件路径"),加载指定目录下的资源文件

●映射文件

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

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

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

8.2.3总结

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

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

8.3SessionFactory对象

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

●SessionFactory是线程安全,及不同的线程都可以使用。

且可以保存,不同的线程获得session必须不同。

8.3.1获得方式

SessionFactoryfactory=config.buildSessionFactory();

8.3.2方法

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

Sessionsession=factory.openSession();

//3.2获得当前线程中绑定的session,同一个线程共享一个session

//*注意:

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

Sessionsession2=factory.getCurrentSession();

8.3.3工具类

publicclassH3Utils{

//获得SessionFactory。

相当于连接池,只有一个

privatestaticSessionFactoryfactory;

static{

factory=newConfiguration().configure().buildSessionFactory();

}

/**

*获得一个新的session

*@return

*/

publicstaticSessionopenSession(){

returnfactory.openSession();

}

/**

*获得线程中绑定的session

*@return

*/

publicstaticSessiongetCurrentSession(){

returnfactory.getCurrentSession();

}

}

8.4Session对象

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

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

●常用方法:

save:

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

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

update:

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

saveOrUpdate:

如果没有id值,将执行save及insert语句。

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

delete:

通过id删除

get:

通过id查询对象,立即查询,当执行get方法之后,马上触发select语句。

如果没有查询到,返回null

load:

通过id查询对象,延迟查询,当执行load方法之后,不触发select语句,直到使用了查询对象的具体的数据时,才触发select语句。

如果没有查询到,将抛异常。

createQuery:

执行HQL语句

createSQLQuery:

执行sql语句

createCriteria:

hibernate提供QBC语句。

(不研究)

merge:

与saveOrUpdate非常相似,如果没有id值将执行insert语句

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

如果数据变化了,将触发update语句。

8.5事务transaction对象

●开启事务:

session.beginTransaction();

●提交事务:

mit();

●回滚事务:

transaction.rollback();

●获得当前事务:

session.getTransaction();

//开启

session.beginTransaction();

 

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

当前位置:首页 > 法律文书 > 调解书

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

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