什么是Hibernate框架?
Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象!
为什么要使用Hibernate?
既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层…
也就是说:java对象和数据表中的列存在映射关系!如果程序能够自动生成SQL语句就好了….那么Hibernate就实现了这个功能!
简单来说:我们使用Hibernate框架就不用我们写很多繁琐的SQL语句,从而简化我们的开发!
ORM概述
在介绍Hibernate的时候,说了Hibernate是一种ORM的框架。那什么是ORM呢?ORM是一种思想
O代表的是Objcet
R代表的是Relative
M代表的是Mapping
ORM->对象关系映射….ORM关注是对象与数据库中的列的关系
针对Transaction transaction = session.getTransaction(); 报错
jdk换成1.8
hibernate.hbm.xml是对象-表的映射文件,格式网上都有,放在类文件下
配置自增长的字段时类型必须为int , 如id的配置
hibernate.cfg.xml是主配置文件,放在src目录下,一般在官网下下载的hibernate中可以搜索到,如
H:\下载\hibernate-search-5.8.0.Final\project\integrationtest\osgi\karaf-it\src\test\resources\hibernate.cfg.xml
console 报错
NoClassDefFoundError: org/jboss/logging/BasicLogger
添加jboss-logging.xxx.jar,
将所需jar包加入lib中后刷新项目即可,无需build path重复添加
NoClassDefFoundError: javax/transaction/SystemException
Java Transaction API java事务管理的jar包
添加jta.jar
NoClassDefFoundError: org/hibernate/annotations/common/reflection/ClassLoaderDelegate
添加hibernate-commons-annotations-xxx.jar
NoClassDefFoundError: com/fasterxml/classmate/TypeResolver
添加classmate.jar
综上,项目所需jar包12个
hibernate3.jar核心 + required 必须引入的(9个) + jpa 目录 + 数据库驱动包
console报错
Error executing DDL via JDBC Statement
检查数据库方言
hibernate.cfg.xml中
<propert name=“hibernate.dialect”>org.hibernate.dialect.Oracle10gDialect</property>
hibernate每次都删除表重新生成
hibernate.cfg.xml中
<property name=“hibernate.hbm2ddl.auto”>create</property>
将create改为update
其他:create-drop 建完表程序运行结束后又删除
create 每次重新启动是删除表再建
validate: 检查,若果前后一样就运行,否则报错
update:检查,有更新就更新表结构
consol报错
Schema-validation: missing table [person]
改为update
consol报错
Error executing DDL via JDBC Statement
注释<!– <property name=”hibernate.hbm2ddl.auto”>update</property> –>
做法,第一次用create 后面注释掉
重要方法
Configuration configuration = new Configuration();
SessionFactory–>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件
SessionFactory factory = configuration.buildSessionFactory();
Session
Session是Hibernate最重要的对象,Session维护了一个连接(Connection),只要使用Hibernate操作数据库,都需要用到Session对象
保存 更新操作
-
session.save(obj); 【保存一个对象】
-
session.update(obj); 【更新一个对象】
-
session.saveOrUpdate(obj); 【保存或者更新的方法】
-
没有设置主键,执行保存;
-
有设置主键,执行更新操作;
-
如果设置主键不存在报错!
主键查询
通过主键来查询数据库的记录,从而返回一个JavaBean对象
-
session.get(javaBean.class, int id); 【传入对应的class和id就可以查询】
-
session.load(javaBean.class, int id); 【支持懒加载】
hql查询
HQL:hibernate query language 即hibernate提供的面向对象的查询语言
查询的是对象以及对象的属性【它查询的是对象以及属性,因此是区分大小写的!】
console报错
person is not mapped [FROM person]
FROM 后跟的是对象,而不是表名,改为FROM User
开启事务,返回的是一个事务对象….Hibernate规定所有的数据库操作都必须在事务环境下进行,否则报错
完整实例: