hibernate知识点详解王成敏.docx
《hibernate知识点详解王成敏.docx》由会员分享,可在线阅读,更多相关《hibernate知识点详解王成敏.docx(89页珍藏版)》请在冰点文库上搜索。
![hibernate知识点详解王成敏.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/cf719c23-1076-49a1-b243-3d486d493a62/cf719c23-1076-49a1-b243-3d486d493a621.gif)
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();