浅析java程序中hibernate的应用总结_java

我们知道如果用java连接数据库,大量的SQL代码,我们就想通过一种工具来操作数据库,
我们首先想到的就是JDBC,但是想更好的针对类的属性进行操作,我们会选择Hibernate。

那么Hibernate 原理是什么呢?
hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,
而数据库返回来的信息hibernate接收之后直接生成一个对象传给java。

一  首先我们先了解一下hibernate的工作7个流程:
1.读取并解析配置文件  
2.创建SessionFactory
3.打开Session
4.开始一个事物
5.持久化操作
6.提交事务
7.关闭Session

二 接着我们要理解实体对象的生命周期是Hibernate 的三种状态
瞬时状态(Transient)
刚用new语句创建,还没有被持久化,且不处于Session的缓存中
持久状态(Persistent)
已经被持久化,且加入到Session的缓存中
游离状态(Detached)
已经被持久化,但不再处于Session的缓存中

三  持久化和ORM也是Hibernate中需要理解的一部分。
持久化:数据模型(内存)《--》存储模型(持久化设备),在Java中说持久化,通常指的是使用SQL将数据存储在关系型数据库中。
ORM是持久化的一种解决方案,主要是把对象模型和关系型数据库关系模型映射起来,并且使用元数据对这些映射进行描述。

Hibernate中必须要搭建项目框架编写hibernate配置文件、实体映射文件
创建项目并导入jar包
创建Hibernate配置文件  
用于配置数据库连接
运行时所需的各种属性

默认文件名为“hibernate.cfg.xml”
测试连接
使用Hibernate完成数据增删改操作
1.创建实体类
2.创建和配置映射文件
3.主键映射
4.主键生成策略
5.在主配置文件中添加实体映射文件路径
6.数据库操作
7.单表增删改查

四 Hibernate 支持两种主要的查询方式
(1)HQL(Hibernate Query Languge,Hibernate 查询语言)
查询
是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念
HQL 是应用较为广泛的方式。

(2) Criteria 查询
又称为“对象查询”,它用面向对象的方式将构造查询的过程做了封装。

五 在运用Hibernate时,我们应该注意一些事情
(1)Hibernate是如何延迟加载?
    1.Hibernate延迟加载实现:a)实体对象 b)集合(Collection)
    2.Hibernate3提供了属性的延迟加载功能
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

(2)说下Hibernate的缓存机制
    1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
    2. 二级缓存: 
       a) 应用及缓存 
       b) 分布式缓存 
   条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、
        非关键数据 
       c) 第三方缓存的实现

时间: 2024-08-03 11:16:14

浅析java程序中hibernate的应用总结_java的相关文章

浅析java程序中hibernate的应用总结

hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,而数据库返回来的信息hibernate接收之后直接生成一个对象传给java   我们知道如果用java连接数据库,大量的SQL代码,我们就想通过一种工具来操作数据库, 我们首先想到的就是JDBC,但是想更好的针对类的属性进行操作,我们会选择Hibernate. 那么Hibernate 原理是什么呢?hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库, 而数据库返

Java程序中的延迟加载功能使用_java

使用多个对象或者大数据结构时,一种提升其性能的方式是运用延迟加载或赋值(来实现).将费时的操作尽可能的缩短的想法,从未实现.我通过一些例子来说明延迟加载技术在Java中如何运用,给予一些指引以在其他语言中能更易(使用)并作为核心语言的一部分. 一种使用场景是通过JTable来展示数百个包含元数据和测量值得域对象.初始化我们的域对象在内存中能保存两种类型的对象,即便在表格中仅显示部分元数据.构建该表格将花费数秒钟的时间,(但)我们可以接受再次展示数百项(数据).在做了一些分析过后,我们改进了我们的

实例解析Java程序中正则表达式的贪婪模式匹配_java

贪婪模式(Greedy): 数量表示符默认采用贪婪模式,除非另有表示.贪婪模式的表达式会一直匹配下去,直到无法匹配为止.如果你发现表达式匹配的结果与预期的不符,很有可能是因为--你以为表达式只会匹配前面几个字符,而实际上它是贪婪模式,所以会一直匹配下去. 贪婪与非贪婪,加上?为非贪婪: var s = '1023000'.match(/(\d+)(0*)/); s ["1023000", "1023000", ""] var s = '10230

java程序中往list中添加对象

问题描述 java程序中往list中添加对象 我有一个类holiday,属性有name和date.先是声明一个list,List list =new ArrayList();然后就holiday hol =new holiday(name,date);最后使用add方法,list.add(hol);这样做是否正确. 可是当我遍历list时,输出的并不是原来定义的name和date,而是,holiday@89ae9e,请问这样对吗?如果我这样在往数据库里存数据是否可以...... 解决方案 楼上正

在Java程序中运行外部类文件

程序 在Java程序中运行外部类文件 一.引言无论是用传统的编程语言(C++.VB等)还是Java语言编程,都经常需要在一个运行的程序中执行另外一个独立的外部程序.例如用Java设计一个IDE程序,那么这个IDE程序就必需能够调式.运行其它独立的外部Java程序.况且直接运行已经存在的外部程序来实现本程序的某些特定的功能,也是提高程序开发效率的一种重要手段.Java2为实现在一个Java程序中运行外部类文件(即Java程序)提供了的两种解决方案,即在同一进程中运行外部类文件和在不同进程中运行外部

Java 程序中的多线程

程序|多线程 在Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应该能够编写简单的多线程程序. 为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 - 打印机.磁盘.数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含

java程序中双重检查锁定与延迟初始化

在java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化.此时程序员可能会采用延迟初始化.但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题.比如,下面是非线程安全的延迟初始化对象的示例代码: public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instanc

教你怎样在java程序中引入neo4j数据库

随着关系型数据库在某些方面的力不从心,了解当下流行的各种数据库模式的特点和性能,无疑会给我们提供更多的选择和方向. neo4j是一种图形数据库,在遍历和关联查询方面具有突出的优势.废话少说,深入了解neo4j之前,先让我们尝试一下怎样在程序中使用neo4j. neo4j采用java语言开发,如果我们要在java程序中以内嵌方式使用neo4j,只需导入neo4j的对应包即可. 首先,我们来创建一个maven项目并修改pom.xml添加对neo4j的依赖. <?xml version="1.0

Java程序中的配置文件的存放和读取

大家可能经常会遇到在Java程序中存取程序配置文件的需求,比如,为了能够 和不同的数据库连接,我们经常把数据库连接的信息存放到属性文件中,这些信 息一般包括数据库驱动程序类名.数据库连接的URL,数据库的用户名和口令等等 .为了便于程序的安装或部署,我们经常会把这些的配置文件存放到程序安装的 根目录中.由于Java程序用包来分组类,有时候将这些配置文件放入到读取它们 的类所在的包目录中会更好一些.比如,在下面的图示中,将数据库配置文件 database.properties放到数据库读取类所在的