Hibernate框架概述
- 什么是框架?
软件是一个半成品,已经帮你完成了部分功能
把一些不确定的东西,按照框架的要求,达到相应的的功能
-
javaEE技术三层架构所用到的技术
-
hibernate简介
hibernate是什么框架:
Hiberante是一个开放源代码的对象关系映射框架
他对JDBC进行了非常轻量级的对象映射封装
他将POJO与数据库表建立映射关系,是一个全自动的orm框架
hibernate可以自动生成SQL语句,自动执行,使java程序员可以随心所欲的使用对象编程思维来操纵数据库
hibernate可以应用在任何使用JDBC的场合,既可以在java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
持久的ORM框架
ORM:Object Relational Mapping(对象关系映射)
指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表
hibernate的好处:
对JDBC访问数据库的代码进行轻量级封装,简化数据库访问繁琐的重复性代码,减少了内存消耗,加快了运行效率
是一个基本JDBC的主流持久化框剪,很大程度上简化了DAO层的编码工作
性能非常好,映射灵活性比较好,支持关系型数据库,一对一,一对多,多对多的各种复杂关系
可扩展性好,源代码及API开放,当本身功能不够用时,可自行编码进行扩展
HIbernate基本使用
-
下载 官网下载对应的hibernate的jar包文件夹
-
Hibernate目录:documentation ,lib,project
-
使用
-
创建一个项目(可以是java项目中使用,可以是web项目中使用)
-
必须引入jar包(hibernate必须jar包,数据库驱动包,用于设置lombok的jar包)
-
建表
-
创建ORM类
@Setter @Getter public class Customer { private Integer cust_id; private String cust_name; private String cust_level; private String cust_phone; }
-
创建Hibernate的核心配置文件
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--连接数据库的基本参数--> <property name="hibernate.connection.driver_class ">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///ssh</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">034312</property> <!--配置Hibernate的方言--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--打印SQL--> <property name="hibernate.show_sql">true</property> <!--格式化SQl--> <property name="hibernate.format_sql">true</property> <!--自动创建表--> <property name="hibernate.hbm2ddl.auto">update</property> <!--映射文件--> <mapping resource="com/zhj/domain/Customer.hbm.xml" /> </session-factory> </hibernate-configuration>
-
创建映射关系
文件名 类名.hbm.xml
在xml中引入dtd
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.zhj.domain.Customer" table="customer"> <!--建立类属性 主键--> <id name="cust_id" column="cust_id" > <generator class="native" /> </id> <!--建立类中的普通属性与数据库当中的字段进行关联--> <property name="cust_name" column="cust_name" /> <property name="cust_level" column="cust_level" /> <property name="cust_phone" column="cust_phone" /> </class> </hibernate-mapping>
-
创建类执行
public class MyTest { public static void main(String[] args) { // 加载Hibernate核心配置文件 Configuration configure = new Configuration().configure(); // 创建一个SessionFactory对象;类似于jdbc中的连接池 SessionFactory sessionFactory = configure.buildSessionFactory(); // 通过SessionFactory获取Session对象: 类似于jdbc中的Connection Session session = sessionFactory.openSession(); // 编写代码 Customer customer = new Customer(); customer.setCust_id(1); customer.setCust_name("李四"); customer.setCust_level("vip1"); customer.setCust_phone("1323232323"); session.save(customer); // 释放资源 session.close(); sessionFactory.close(); } }
使用注解设置 getter setter 方法 lombok : https://jingyan.baidu.com/article/6181c3e025d9dc552ff15368.html
-
常见配置
-
映射配置
-
class标签
作用:建立类与表的映射关系
属性:
name: 类的全路径
table: 表名,类名与表名一致,table可以省略,如果没有该表,则自动创建一个表
catalog: 数据库名,可以不写
-
id标签
作用:建立类中属性与表中主键的对应关系
属性:
name: 类中的属性
columan:表中的字段
-
property标签
作用:建立类中普通属性与表的对应关系
属性:
name: 类中的属性
columan:表中的字段
-
-
核心配置
-
必须配置
连接数据库的基本的property参数:驱动类,url路径,用户名,密码
方言
-
可选配置
显示SQL:hibernate.show_sql
格式化SQL:hibernate.format_sql
自动建表:hibernate.hbm2ddl.auto
属性:
none:不使用hibernate的自动建表
create:如果数据库中已有表,删除原有表,重新创建,如果没有表,新建表
create-drop:
如果数据库中已有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表
最后数据库中一个表没有,为了做测试用
把 sessioniFactory也close掉时才有效果
update:
如果数据库中已有表,使用原有表,如果没有表,则创建新表
更新表结构,如果column没有时会创建新的一列
validate:
如果没有表,不会创建表,只会使用数据库中原有表
校验映射和表结构是否一致,不一致就会报错
-
引入映射文件 : 使用mapping文件引入映射文件
-
核心API
-
Configuration
-
Hibernate的配置对象:
Configuration类 的作用时对Hibernate进行配置,以及对他们进行启动
在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象
虽然Configuration类在整个Hiberante项目中扮演着一个很小的角色,但它是启动hibernate时所遇到的第一个对象
-
通过这个对象去加载面的配置
-
把里面的数据内容得到,才能进行后面的工作
-
作用
- 加载核心配置文件
- 加载映射文件
-
-
SessionFactory
-
SessionFacotroy
SessionFactory接口:SessionFactory接口负责初始化Hibernate
并负责创建Session对象
需要注意的是SessionFactory并不是一个轻量级的,因为一般情况下,一个项目只需要一个SessionFactory就够了当需要多个数据库时,可以为每个数据哭指定一个SessionFactory
内部维护了hibernate的连接池和hibernate的二级缓存
一个项目只需要创建一个就行了,因为里面有连接池,连接池创建一个就够可以了
-
配置连接池(以后使用Spring进行整合)
引入c3p0 的jar包
添加c3p0的配置信息
hibernate.cfg.xml中
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property>
-
查看日志
引入jar包
把log4j.properties放到src下
结构:
-
输出源
console控制台
file文件
-
级别
error
warn
info
debug
trace
-
-
-
Session