Hibernate入门这一篇就够了

 
什么是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 后面注释掉
 
 
重要方法
  • 如果指定参数,那么加载参数的路径配置文件
  • 如果不指定参数,默认加载src/目录下的hibernate.cfg.xml
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规定所有的数据库操作都必须在事务环境下进行,否则报错
 

 

 

 
 
 
完整实例:
 
hibernateTest.rar
 
 
 
 
 
 
 

body, td { font-family: 微软雅黑; font-size: 10pt }

版权声明:本文为zl-programmer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zl-programmer/p/15267921.html