原创转载请注明出处:http://agilestyle.iteye.com/blog/2359961
Hibernate核心接口
Configuration
SessionFactory
Session
Query
Criteria
Transaction
Hibernate工作原理
配置Configuration对象,读取并解析配置文件
读取并解析映射信息,创建SessionFactory
创建session对象
开启事务Transaction
完成CRUD持久化操作
提交事务
关闭session
Hibernate关系映射
@ManyToOne(fetch默认FetchType是eager)
@OneToMany(fetch默认FetchType是lazy)
@OneToOne(fetch默认FetchType是eager)
@ManyToMany(fetch默认FetchType是lazy)
Hibernate对象状态
Transient
Persistent
Detached
Customer customer = new Customer(); // new之后,不处于Session的缓存中:临时态 session.save(customer); // 处于这两句之间,已经被持久化,加入到Session的缓存中:持久态 transaction.commit(); session.close(); // session关闭之后,已经被持久化,但不再处于Session的缓存中:游离态
Hibernate的缓存等级及其特点
一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库取数据。
二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。
Hibernate有哪些主键
TABLE
SEQUENCE
IDENTITY
AUTO
Hibernate有几种查询数据的方式
有三种查询方式
- HQL:Hibernate Query Language,它跟SQL非常类似
- Criteria Query,以对象的方式添加查询条件
- SQL,直接使用SQL语句操作数据库
Hibernate的Set, List, Bag, Map有什么异同
List可以重复,有序的一种集合
Bag(结合了List与Set),可以重复且没有顺序的一种集合,是Hibernate提供的
Set不可以重复,没有顺序的一种集合
Map是key-value对形式的一种映射
Hibernate中session.save()和session.persist()的区别
session.save()返回的是Serializable
session.persist()返回的是void
Hibernate中load()方法和get()方法的区别
load()与get()方法都可以根据标识符属性值查询获取一个持久化对象,但是在为找到符合条件的持久化对象时,load()方法抛出违例;get()方法返回null。
get()方法先从Hibernate一级缓存中查询符合条件的对象,找不到则直接从数据库中查找记录;
而load()方法则从Hibernate先从Hibernate的一级缓存中查找符合条件的对象,找不到还会在Hibernate的二级缓存中查找对象,仍未找到才会查找数据库。
Hibernate中inverse属性的作用
在Hibernate中一对多的单向或者双向关联的情况下,我们可以将“一”方控制权交给“多”方,称为“控制反转”(inverse),代码中使用控制反转需要在一方的映射文件中设置inverse属性为true,该属性的默认值为false。
Hibernate的检索策略
HQL
// 创建一个Query对象 Query query = session.createQuery("from Customer as c where c.name = :customerName" and c.age = :customerAge"); // 动态绑定参数 query.setString("customerName", "Tom"); query.setInteger(customerAge", 21); // 执行查询,返回查询结果 List result = query.list(); 方法链编程风格 List result = session.createQuery("from Customer as c where c.name = :customerName" and c.age = :customerAge") .setString("customerName", "Tom") .setInteger("customerAge", 21) .list();
QBC
// 创建一个Criteria对象 Criteria criteria = session.createCriteria(Customer.class); // 设定查询条件,然后把查询条件加入到Criteria中 Criterion criterion1 = Expression.like("name", "T%"); Criterion criterion2 = Expression.eq("age", new Integer(21)); criteria = criteria.add(criterion1); criteria = criteria.add(criterion2); // 执行查询语句,返回查询结果 List result = criteria.list(); 方法链编程风格 List result = session.createCriteria(Customer.class) .add(Express.like("name", "T%")) .add(Express.eq("age", new Integer(21))) .list();
Hibernate分页查询
采用HQL检索方式
Query query = session.createQuery("from Customer c order by c.name asc"); query.setFirstResult(0); query.setMaxResult(10); List result = query.list();
采用QBC检索方式
Criteria criteria = session.createCriteria(Customer.class); criteria.addOrder(Order.asc("name")); criteria.setFirstResult(0); criteria.setMaxResult(10); List result = criteria.list();
相关推荐
基于java的贝儿米幼儿教育管理系统答辩PPT.pptx
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
基于java的消防物资存储系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
TA_lib库(whl轮子),直接pip install安装即可,下载即用,非常方便,各个python版本对应的都有。 使用方法: 1、下载下来解压; 2、确保有python环境,命令行进入终端,cd到whl存放的目录,直接输入pip install TA_lib-xxxx.whl就可以安装,等待安装成功,即可使用! 优点:无需C++环境编译,下载即用,方便
使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能
基于java的就业信息管理系统答辩PPT.pptx
25法理学背诵逻辑.apk.1g
基于java的大学生校园兼职系统答辩PPT.pptx
做到代码,和分析的源数据
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
适用于ensp已经入门人群的学习,有一定难度
基于java的数码论坛系统设计与实现答辩PPT.pptx
tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl
基于java的医院信管系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
tornado-4.2.tar.gz
链表 合并两个链表,链表基础操作