苟耀:蜗牛学院高级讲师,11年Java开发和教学经验。专攻Java Web开发,具备全栈开发能力,精通JavaScript、Bootstrap、jQuery、Mybatis、SpringMVC、Spring、Springboot、Mysql等Web开发相关技术,对框架底层原理有深入的理解。授课风趣幽默, 注重逻辑善于从技术原理出发,授之以渔。
Hibernate简介
ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
Hibernate的优点:
1.将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
2.提供线程和进程两个级别的缓存提升应用程序性能。
3.有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
4.屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
5.非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。
核心API:
1.Configuration类
Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。
2.SessionFactory接口
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
3.Session接口
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。注意,Hibernate的session不同于JSP应用中的HttpSession。
4.Transaction接口
Hibernate封装的事务接口,通过接口可以管理JDBC事务。
5.Query接口
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
6.Criteria接口
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
Hibernate入门案例
使用Hibernate5搭建Hibernate开发环境步骤如下:
1.去Hibernate官网下载Hibernate开发包,下载地址如下:
https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.4.2.Final/hibernate-release-5.4.2.Final.zip/download
2.下载完成之后解压所得到的的目录如下
documentation:开发文档
lib:Hibernate提供的jar包以及Hibernate有可能用到的一些其他第三方的依赖包。
project:Hibernate源码
3.新建java项目将lib文件夹中required目录中的所有包导入到项目中。
4.导入对应的数据库jdbc驱动包
5.在src目录下新建hibernate.cfg.xml,该文件为hibernate核心文件主要用于配置Hibernate的相关信息。
6.在hibernate.cfg.xml文件中导入dtd校验文件,dtd文件主要用于规范和校验xml文件中的内容,Hibernate 核心配置文件的dtd处于org.hibernate包下,复制dtd文件中的DOCTYPE部分到xml文件中即可。
7.在hibernate.cfg.xml文件中配置数据库连接信息(基础),具体配置如下图:
上图所示中的各项hibernate属性解释(属性名称一定要写正确且区分大小写):
connection.driver_class:数据库驱动类
connection.url:数据库连接地址
connection.username:数据库用户名
connection.password:数据库密码
dialect:方言
current_session_context_class:配置Session对象的存储容器
show_sql:设置为true时,将会在控制台打印出执行的sql语句,利于调试
format_sql:设置为true时,将会格式化sql语句然后在输出
hbm2ddl.auto:根据实体类自动创建|更新|验证数据库表结构(正向工程),可选值有:
create:每次加载Hibernate时,会先删除原来的表,然后重新创建新表
create-drop:每次加载Hibernate时会创建表,SessionFactory关闭时自动删除表
update:每次加载Hibernate时如果表不存在则创建表,如果表存在但是字段信息不正确则会更新字段信息(Hibernate只能保证实体类的属性在表中都找得到对应的字段)
validate:每次加载Hibernate时都会检查实体类和数据库是否一致,如果字段不一致则更新字段,但是不会创建表。
none:不进行正向工程
8.创建实体类并配置实体类映射信息
在Hibernate中配置实体类映射信息有两种方式,配置文件版和注解版,注解版使用更加便捷,推荐大家使用注解版。
以下以学生信息(Student)类举例:
新建实体类Student,并在类和属性上添加对应注解,如下图:
上述使用到的注解解释:
@Entity:表示当前类为一个实体类,Hibernate将会扫描该类上的注解
@Table:配置数据库表的信息,通过该注解可以配置实体类映射的表名以及一些其他额外信息
@Id:主键映射信息,用来标注当前实体类属性对应的列作为表的主键
@GeneratedValue:配置主键生成方式
@Column:配置实体类属性映射的列名,@Column注解中属性较多,以下为重要属性详情:
name:定义了被标注字段在数据库表中所对应字段的名称
unique:表示该字段是否为唯一标识,默认为false。如果为true则会添加唯一约束,如果表中有一个字段需要唯一标识,则既可 以使用该标记
nullable:表示该字段是否可以为null值,默认为true,如果为false则会添加非空约束。
length:表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
9.将所有需要进行对象关系映射的实体类类名在hibernate.cfg.xml中告知给Hibernate
10.新建测试类,获取Session连接,新增一条数据到数据库
每个大版本获取SessionFactory的方式不尽相同,最好的方式是大家自己查看下载的Hibernate开发文档,有对应的示例代码。
以5.0版本为例:
Configuration config = new Configuration() ;config.configure();SessionFactory sessionfactory = config.buildSessionFactory();Session session = sessionfactory.openSession();
蜗牛学院最新开班时间: