Hibernate总结

Hibernate是什么?
Hibernate是一个框架(framework)
Hibernate是一个orm框架
Orm(object relation mapping)对象关系映射 框架
Hibernate处于项目的持久层,正因为如此,所以有人又把hibernate称为持久层框架
hibernate实际上是对jdbc轻量级的封装

Hibernate设计原理
Hibernate框架是一款ORM工具。基于ORM设计思想开发出来的。
ORM:Object–Relation–Mapping对象关系映射
对象指的就是Java的实体对象;
关系指的是关系型数据库。(Oracle、DB2、MySql、SqlServer)
ORM的主要思想就是将程序中的对象和数据库中的数据实现自动映射
转换。利用ORM工具,在查询时,可以自动将记录封装成Java对象返
回。在更新、插入操作时,可以将对象自动写入数据表。对于中间的
SQL+JDBC操作细节,完全封装在工具底层
基于ORM思想设计的框架有很多,例如Hibernate,iBATIS,JPA等.

Hibernate主要API
Configuration:用于加载主配置文件(hibernte.cfg.xml)和映射文件。
SessionFactory:用于创建Session对象。
Session:将原Connection对象进行了封装,代表Hibernate与数据库之
间的一次连接,负责执行增删改查操作。
save(),update(),delete(),load(),get()方法.
Transaction:用于进行事务管理。
注意:由于关闭了JDBC中的自动提交功能
(setAutoCommit(false)),所以使用时,必须显示地
执行commit 操作。
Query:负责执行各种查询。

实体间的关系
在这里插入图片描述
Hibernate数据映射类型:
在hbm.xml中,描述属性和字段之间映射的时候,可以使用type属性指定数据
映射类型。
type属性可以指定Java类型和Hibernate类型。主要作用是指定属性值和字段
值之间转换时(即在底层执行rs.getXXX(),stmt.setXXX()时XXX的类型),采用的
转换类型。(建议采用Hibernate映射类型)
Hibernate数据映射类型主要有以下几种:
a.整数类型
byte,short,integer,long
b.浮点数类型
float,double
c.字符串类型
string
d.日期时间类型
date,time,timestamp
其中:
date只取年月日,
time只取小时分钟秒,
timestamp取完整的时间年月日小时分钟秒
e.boolean类型
该类型可以实现boolean属性和字符之间的转换。
yes_no:将true|false转换成Y|N
true_false:将true|false转换成T|F
底层实现方法:
stmt.setChar(cost.getBoolean().toString())
cost.setBoolean(Boolean.parseBoolean(rs.getChar("***")))
f.其他big_decimal,big_integer,clob,blob

一对多关系映射
a.确定两个对象哪个是1方和n方
b.需求:由1方对象查询n方记录,可以采用一对多关系映射
c.首先在1方实体类中添加集合属性Set
d.然后再1方的hbm.xml中定义一对多关系映射的描述

多对一关系映射
a.需要由n方对象查询1方对象信息
b.在n方实体类中添加属性,属性类为1方类型
c.在n方hbm.xml文件中,添加属性的映射描述信息

d.清除n方实体类中外键字段描述信息和属性
e.使用时,通过n方对象.关联属性获取相关的1方记录信息

多对多关系映射
多对多关系在数据库中需要3张表表示。
例如AdminInfo–>Admin_Role<–Role
如果需要根据Admin查找Role,可以建立Admin到Role的多对多关系映射。具
体过程如下:
a.在Admin实体类中追加一个集合属性,用于存储相关联的Role对象信息
b.在Admin的hbm.xml中描述集合属性映射

Hibernate查询
a.HQL查询
Hibernate Query Language
HQL与SQL语句结构相似,SQL语句是面向数据表和字段进行查询,而HQL
语句是面向Hibernate映射过来的对象进行查询,因此HQL被称为是
一种面向对象查询语言
HQL和SQL共同点:
–都支持select,from,where,order by,having,group by等子句。
–都支持运算符表达式,例如+,-,
,/,>,<等
–都支持in,not in,between and,like等过滤条件关键字
–都支持分组函max,min,sum,avg,count
HQL和SQL不同点:
–HQL是大小写敏感的,类名和属性名严格区分大小写
–HQL不支持select * 写法
–HQL不支持join…on…中的on子句,因为join…on发生在多表操作,而
Hibernate中对于有关系的多张表已将将关联映射写在了xxx.hbm.xml
中,在查询时会自动加上join…on
–HQL不支持表名和字段名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate分页实现可以通过使用Hibernate的Criteria API或者HQL语句来实现。在引用\[2\]中的代码示例中,使用了Hibernate的findByCriteria方法来进行分页查询。该方法接受一个Criteria对象作为参数,可以设置查询条件和排序方式,并通过指定当前页码和每页显示的记录数来实现分页查询。 在引用\[3\]中的代码示例中,使用了HQL语句来进行分页查询。首先通过查询总记录数来计算总页数,然后通过设置起始索引和每页显示的记录数来获取指定页码的数据。 需要注意的是,以上示例中的代码只是部分代码片段,实际使用时需要根据具体的业务需求进行适当的修改和完善。 总结起来,Hibernate分页实现可以通过使用Criteria API或者HQL语句来设置查询条件和分页参数,从而实现分页查询功能。 #### 引用[.reference_title] - *1* [Hibernate分页实现](https://blog.csdn.net/lenny_wants/article/details/122555560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [hibernate实现分页的几种方式](https://blog.csdn.net/qq_34823118/article/details/78298139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [hibernate实现分页](https://blog.csdn.net/NSJFYS/article/details/117958377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值