Hibernate详解

Hibernate的详细介绍和使用方法 Hibernate的详细介绍和使用方法。Hibernate的查询方式和在tomcat下的配置。 立即下载
★→→SessionFactory (org.hibernate.SessionFactory)
 包含已经编译的映射(mappings),是制造session的工厂,可能含有一些可以在
 各个事务(transaction)之间共享的数据
(1) SessionFactory的缓存
 可分为两类:内置缓存和外置缓存。
 SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同时也缓存了Hibernate自动生成的SQL语句等;
 SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存
 能存放大量数据库数据的拷贝,外置缓存的物理介质可以是内存或者硬盘。

(2) 只有一个数据存储源,只需创建一个SessionFactory
 SessionFactory就是个重量级对象,如果应用只有一个数据存储源,只需创建一个SessionFactory实例,
 因为随意地创建SessionFactory实例会占用大量内存空间。
 但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。
(3) Configuration的其他用法
 Configuration的configure ()方法还支持带参数的访问方式,你可以指定hbm.xml文件的位置,而不是使用默认的classpath
 下面的hibernate.cfg.xml这种方式,例如:
 Configuration cfg = new Configuration().configure("myexample.xml");


★★→→Configuration
 Configuration是hibernate的入口,在新建一个Configuration的实例的时候,hibernate会在classpath里面查找
 hibernate.properties文件,如果该文件存在,则将该文件的内容加载到一个Properties的实例GLOBAL_PROPERTIES里面,
 如果不存在,将打印信息:hibernate.properties not found
  然后是将所有系统环境变量(System.getProperties())也添加到GLOBAL_PROPERTIES里面。如果hibernate.properties文件存在,
 系统还会验证一下这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印警告信息。
(1) 作用---实现对Hibernate进行配置
? Configuration接口的作用是对Hibernate进行配置,以及对它进行启动
 在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。
? 根据Configuration对象创建一个SessionFactory对象
 为了能创建一个SessionFactory对象,你必须在Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理。
 这样,Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建成功后,Configuration对象就没有用了,你可以简单地抛弃它。

(2) 它是启动hibernate的对象
 虽然Configuration接口在整个Hibernate项目中只扮演着一个很小的角色,但它是启动hibernate时你所遇到的第一个对象。

(3) Configuration config = new Configuration();
 config.addClass(Customer.class);
 sessionFactory = config.buildSessionFactory();
或者:
 使用方法链编程风格,可以改写为:
 sessionFactory = new Configuration().buildSessionFactory().addClass(Customer.class).buildSessionFactory();
注意:
方法链编程风格能使应用程序代码更加简捷。在使用这种编程风格时,最好把每个调用方法放在不同的行,否则在跟踪程序时,无法跳入每个调用方法中。

★★★→→Session(org.hibernate.Session)
(1) 单线程的,短寿命的对象,代表了一次会话的过程。实际上是把一个JDBC Connection打包
 了,它可以包含一些持久化对象的缓存
 看作介于数据连接与事物管理一种中间接口.
 在hibernate的设计者中.他们将session看作介于数据连接与事物管理的一种中间接口
 或者想象成一个持久对象的缓冲区
 hibernate能检测到这些持久对象的改变,并及时刷新数据库
 
(2) 每一个Session实例和一个数据库事务绑定
 通常将每一个Session实例和一个数据处理库事务绑定
 就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例.
 如果事务执行中出现异常,应该撤消事务.
 不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例
 占用的资源.

(3) 如何获得Session对象
 首先创建SessionFactory对象
 应用服务器如果访问多个数据源时,则应该产生多个SessionFactory;
 但是仅仅为了服务与某个请求时,不要创建一个新的SessionFactory,因为创建
 SessionFactory需要消耗大量的资源.
 然后根据SessionFactory再创建Session对象
 例如:::::
----------------------------------------------------------------------------------
 Session session=sessionFactory.openSession();
 Transaction tx;
 try{
  tx=session.beginTransaction();//开始一个事务
  .......//执行事务
  tx.commit();  
 }catch(Exception e){//如果出现异常就撤消事务
  if(tx!=null)
   tx.rollback();
  throw e;
 }
 finally//不管事务执行成功与否,最后都关闭Session并且放在finally中以提高安全性
  session.close();
-----------------------------------------------------------------------------------
(4) Sessin 接口中的常用方法
 基本的CURD操作(save()方法:把Java对象保存数据库中、update()方法:更新数据
 库中的Java对象、delete()方法:把Java对象从数据库中删除、load()方法:从数据
 库中加载Java对象 和find()方法:从数据库中查询Java对象);执行查询;

◆ save()方法:save() 和persist()方法产生SQL INSERT
session = HibernateUtil.currentSession();
      tx = session.beginTransaction();
      Book oneBook = new Book();     
 oneBook.setBookName(new String("J2EE应用开发".getBytes("gb2312"), "ISO8859-1"));
      oneBook.setBookKind('1');
      oneBook.setBookPrice(7.4f);
      session.save(oneBook);
      tx.commit();
◆? Sessin 接口中的常用方法---- updata()和merge()方法产生SQL UPDATE
该方法调用Session的load()方法,加载Customer对象,然后再修改Customer对象的属性。
     session = HibernateUtil.currentSession();
      tx = session.beginTransaction();
      Book oneBook=(Book)session.load(Book.class,bookID);
 oneBook.setBookName(new String("Java应用开发".getBytes("gb2312"), "ISO8859-1"));
      oneBook.setBookKind('1');
      oneBook.setBookPrice(10.4f);
      tx.commit();

◆? Sessin 接口中的常用方法---- load和get方法
session的load和get方法根据给定的OID从数据库中加载一个对象,load方法在没有找  到对象时抛出notFoundException异常,get方法返回null;
get和load和其他查询方法返回的对象位于session的缓存中,修改了对象的属性后,  session清理缓存时,会根据持久化对象的属性来更新数据库。
用来对数据库中检索对象,load()和get()方法按照给定的OID加载一个持久化对象
public Iterator getAllCourses()throws HibernateException
{
String queryString = "select courses from Course as courses";
beginTransaction();
Query query = session.createQuery(queryString);
Iterator it= query.iterate();
return it;
}
/**
*按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。
*/
public Iterator getSomeCourse(String name)throws HibernateException
{
String queryString = "select c from Course as c where c.name like :name" ;
beginTransaction();
Query query = session.createQuery(queryString);
query.setString("name", "%"+name+"%");
Iterator it= query.iterate();
return it;
}

◆? Sessin 接口中的常用方法---- delete()方法产生SQL DELETE
由于从数据库中删除对象对应的记录,如果出入的是持久化对象session就计划执行一个delete语句。
如果出入的参数是游离态对象,先使它成为持久化对象,然后计划执行一个delete语句。session只有在清理缓存的时候才会执行delete语句。
只有当调用session的close()方法时才会从session的缓存中删除对象。
session = HibernateUtil.currentSession();s
      tx = session.beginTransaction();
      Book oneBook=(Book)session.load(Book.class,bookID);
      session.delete(oneBook);
      tx.commit();

  
★★★★→→Transaction
★★★★★→→Query查询对象
 Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。
 Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

 Query query=session.createQuery();
 List list = query.list();//把query查询对象放到Query的list里面,返回一个query对象
 
★★★★★★Callback 方面的接口
 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息---它允许
 应用程序能对一些事件的发生作出相应的操作。例如Interceptor、Lifecycle和Validatable都是这一类接口。一般而言,
 Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。


◎第一步.---->获取Sessionfactory对象
 Sessionfactory sf=new Configuration().configure().buildSessionFactory();
◎第二步.---->创建session对象
 Session session=sf.openSession();
◎第三步.---->获取对数据库操作前的事物对象
 Transaction tx=session.beginTransaction();
◎第四步.---->利用session的多个方法进行数据操作.例如:session.save(实体bean对象);session.update(实体bean对象)等;
◎第五步.---->tx.commit();保存持久化数据库操作;

◎ 数据其他操作.比如查询Query query=session.createQuery("from student where username='"+username"'");//student为一个实体bean对象.就是与hbm.xml对应的和数据库映射的一个 javabean.


其他接口::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::? 主键的生成 (IdentifierGenerator 接口)
?         本地SQL语言支持 (Dialect 抽象类)
?         缓冲机制 (Cache 和CacheProvider 接口)
?         JDBC 连接管理 (ConnectionProvider接口)
?         事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)
?         ORM 策略 (ClassPersister 接口)
?         属性访问策略 (PropertyAccessor 接口)
?         代理对象的创建 (ProxyFactory接口)
 
Hibernate课件-------超全超详细的介绍hibernate 许多有经验的开发人员都有一个共同的认识,那就是Hibernate要比Struts和Spring难掌握得多,初学者要想学好Hiberante就更是难上加难了!本课程的讲解者李勇老师的技术功底非常深厚,课程内容组织得非常合理和巧妙,知识点的讲解也很细腻和透彻,总结了许多独有的经验,许多有经验的开发人员听完李勇老师的Hibernate课程后,都有一种恍然大悟的感慨。 立即下载

相关推荐

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

Hibernate框架【一】——HIbernate框架介绍

Hibernate是一个开源的Java对象关系映射(ORM)框架,它提供了一种方便的方式将Java对象与关系型数据库进行映射和交互。通过Hibernate,开发人员可以使用面向对象的方式操作数据库,而不需要直接编写SQL查询语句。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1万+

H3C无线控制器AC与第三方认证系统集成实现企业级Portal短信认证方案

本文详细阐述了如何将H3C无线控制器(AC)与第三方认证系统集成,构建企业级Portal短信认证方案。该方案通过手机号作为临时凭证,实现了访客网络的实名追溯、权限控制与专业体验。文章深入解析了方案原理、H3C AC的关键配置步骤、第三方系统对接要点及短信网关选型避坑指南,为企业提升网络安全管理与访客服务质量提供了完整、可行的实战指导。

a3b4c5的博客 196

hibernate简介介绍

1.Hibernate介绍 1.2Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了较为轻量级的对象封装,它将entity数据库表建立映射关系,是个全自动的orm框架,Hibernate可以自动生成SQL语句,自动执行使得java程序员可以随心所欲的使用面向对象编程思维来操作数据库,通过操作对象的方式来操作数据库极大的提高开发的效率.Habernate可以应运在任何使用JDBC的场合是持久层的一款框架用来完成数据持久化的重任.ORM(object RelationMapping):对象

m0_56378709的博客 804

当windows安装git时出现以下错误提示

Windows安装Git时出现多个系统配置设置失败错误(exit code 4294967295),提示包括无法设置textconv、LFS过滤器和SSL等配置项。关键问题在于scalar.exe版本不兼容,系统提示"该版本的scalar.exe与你运行的Windows版本不兼容"。解决方案是检查程序版本是否正确,下载与Windows系统兼容的正确版本重新安装即可。

沧澜的博客 1876

手把手教你为RV1126开发板点亮3寸MIPI屏(ST7701S驱动,含设备树配置避坑点)

本文详细介绍了RV1126开发板适配3寸MIPI屏幕(ST7701S驱动)的全流程,涵盖硬件设计、信号完整性保障、屏幕时序参数计算及设备树配置等关键步骤。特别针对MIPI差分信号布线、电压匹配和设备树配置中的常见问题提供了实用解决方案,帮助开发者高效完成屏幕适配工作。

weixin_42524703的博客 339

Hibernate中session常用方法

1.session.save(实体类) 保存2.session.get(实体类的字节码文件,变量id)3.session.update(实体类)4.session.delete(实体类)5.查询使用query对象来查询Query q = session.createQuery(hql)什么是hqlhql是hibernate的查询语言 ( from 实体类) 不需要写selcet相对于sql语句...

weixin_34043301的博客 810

保姆级教程:在Windows上用Docker Desktop一键部署Dify 1.0.1(附国内镜像加速)

本文提供在Windows系统上使用Docker Desktop快速部署Dify 1.0.1的详细教程,包括环境准备、国内镜像加速配置、Dify容器部署实战及常见问题解决方案。特别针对国内用户优化,确保快速完成部署并提升开发效率。

weixin_33738555的博客 282

【Hibernate】【Session对象】【Query对象和HQL】

Session对象 1.简介 session对象是与数据库会话的对象,提供了与数据库交互的方法. session对象是线程不安全的,所以不能做为全局变量. 2,Session对象的获取和关闭 获取/创建和关闭的方法: //获取新的session对象(不常用) Session session = sessionFactory.openSess

Armo的博客 1151

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1082

非线性功率放大器对QAM传输BER性能的影响及补偿

1、线性功率放大器对传输性能的影响 为表述非线性功率放大器对传输性能的影响,以Saleh模型进行观察。具体来说,在QAM调制器之后添加一个非线性模块,使调制后的波形经历AM / AM和AM / PM转换。 在Saleh模型中,转换用四个参数表示,即AM / AM转换为????a和????a,AM / PM转换为????p和????p。 在Saleh模型中,AM / AM和AM / PM方程以输入电压u的大小表示为: 式中,FAM / AM是AM / AM转换的输出电压与输入电压的关系,而FAM

太阳帅帅的博客 2081

Hibernate5的Query接口浅析

Query接口的基本知识 使用Query对象可以方便的查询数据库中的数据,它主要使用HQL或者本地SQL查询数据。Query对象不仅能查询数据,还可以绑定参数、限制查询记录数量、实现批量删除和批量更新等。 Configuration cfg=new Configuration().configure("hibernate.cfg.xml"); SessionFactory sf=cfg.build...

monkey_wei的博客 1310

CSP-J2019普及组复赛T4:加工零件

CSP-J2020普及组复赛T1:优秀的拆分,广度优先遍历求最短路。

少儿编程乔老师 1854

hibernate hibernate4详解

表名和类名不同的情况时,对表名进行配置  1 在注解中  import javax.persistence.Table; @Table(name=”TableName”)  2 在XML文件中    配置对应的table属性为相应的表名      …        字段名和属性名相同,默认为  对于annotation,如果什么注解都不写的话,相当于加了注解@Basic  实

Code-lover's Learning Notes 1559

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hibernate API 详解

Hibernate 主要的 API 详解 org.hibernate.cfg.Configuration 加载主配置文件以及映射文件,启动 hibernate。 主配置文件中主要有:数据库连接四要素,方言,数据源… 默认获取 hibernate.cfg.xml 配置文件 Configuration configer = new Configuration().configure(); ...

. 1789

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hibernate 详解

基础 1. 什么是框架 框架是软件的半成品,已经完成了相应部分的内容了.只需要实现自己业务即可. 2. ORM(对象关系映射) O:面向对象领域的Object(JavaBean对象) R:关系数据库领域的Relational(表的结构) M:**映射**Mapping(XML的配置文件)为桥梁链接 对象 和 表 Hibernate使程序员通过操作对象的方式来操作数据库表记录 3. Hib...

凯凯的博客 1147

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java hibernate 详解_Java Hibernate 之连接池详解

Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在配置连接池时需要注意的有三点:一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。二、默认情况下(即没有配置连接池的情况下),Hiberna...

weixin_39562338的博客 204

详解 hibernate mapping配置

详解 hibernate mapping配置 每个hibernate只会启动的时候引入一个文件,那就是:hibernate.cfg.xml mapping需要我们在hibernate中引入, <mapping resource="com/hibernate/test/hibernate_IP.xml"/> <mapping class="com.hibernate.test.St...

lomo_2019的博客 3231

Hibernate:hibernate.cfg.xml 和 Spring配置中引入hibernate 的配置详解

hiberante.cfg.xml配置 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

zzjvslove的博客 2344

hibernate知识详解,看完这篇文章,完全掌握hibernate

JDBC 什么是JDBC? JDBC,全名 JAVA接(java DataBase Connectivity)技术的简称,由一组使用java语言编写的类与接口组成,可以为多种关系数据库提供统一访问。连接数据库后通过SQL来操作数据库。 JDBC的问题: 1、从连接效率上考虑,每一个操作都要重新连接数据库,对数据库造成较大的压力。 2、从代码上考虑,我们每次操作都要写编译以及对连接的控制,还要考虑到...

W_angpeng的博客 862

一文详解Hibernate

Configration接口。

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 1637

Hibernate缓存深入详解[贵在深入]

liangqilang的专栏 81
上一篇: java I/O系统2
下一篇: 关于线程的停止问题
kevin_long
博客等级 码龄20年 30粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值