简介Java的Hibernate框架中的Session和持久化类

 更新时间:2015年12月15日 08:49:36   投稿:goldensun  
这篇文章主要介绍了Java的Hibernate框架中的Session和持久化类,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下

Session
Session对象用于获取与数据库的物理连接。 Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对象被保存,并通过一个Session对象中检索。

会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,他们应该被创建并根据需要摧毁他们。这次会议的主要功能是提供创建,读取和删除操作映射的实体类的实例。实例中可能存在以下三种状态之一在给定时间点:

短暂性: 持久化类的未与会话相关联,并在数据库中没有代表性,没有标识值的新实例被Hibernate认为是暂时的。

持久性: 可以做一个瞬态的实例持久化通过将它与一个会话相关联。持久性实例都有一个表示在数据库中,一个标识符值,与会话相关联。

独立性: 一旦我们关闭Hibernate的Session,持久化实例将成为一个分离的实例。

一个Session实例是可序列化的,如果它的持久化类是可序列化的。一个典型的事务应该使用下面的语句:

Session session = factory.openSession();
Transaction tx = null;
try {
  tx = session.beginTransaction();
  // do some work
  ...
  tx.commit();
}
catch (Exception e) {
  if (tx!=null) tx.rollback();
  e.printStackTrace(); 
}finally {
  session.close();
}

如果Session抛出异常,事务必须回滚,会话必须被丢弃。

持久化类
Hibernate的整个概念是采取从Java类属性的值,并将持久到数据库表。一个映射文件Hibernate的帮助确定如何从拉动类的值,并将它们映射与表和相关的域。

其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类。 Hibernate的效果最好,如果这些类遵循一些简单的规则,也称为普通Java对象(POJO)编程模型。有下列持久化类的主要规则,但是,这些规则并不是必需的。

将所有的持久化Java类需要一个默认的构造函数。

所有类应该包含为了让容易识别对象内Hibernate和数据库的ID。此属性映射到数据库表的主键列。

所有属性将被持久化应该声明为private,并已在JavaBean风格的定义的getXXX和setXXX方法。

Hibernate的关键功能,代理,取决于持久化类或者是非final的,或者说声明的所有公共方法的接口的实现。

所有的类不扩展或实现的EJB框架需要进行一些专门的类和接口。

POJO名称用于强调一个给定的对象是一个普通的Java对象,而不是一个特殊的对象,好更不是Enterprise JavaBean。

一个简单的POJO例子:
基于上面提到的一些规则,我们可以如下定义一个POJO类:

public class Employee {
  private int id;
  private String firstName; 
  private String lastName;  
  private int salary; 

  public Employee() {}
  public Employee(String fname, String lname, int salary) {
   this.firstName = fname;
   this.lastName = lname;
   this.salary = salary;
  }
  public int getId() {
   return id;
  }
  public void setId( int id ) {
   this.id = id;
  }
  public String getFirstName() {
   return firstName;
  }
  public void setFirstName( String first_name ) {
   this.firstName = first_name;
  }
  public String getLastName() {
   return lastName;
  }
  public void setLastName( String last_name ) {
   this.lastName = last_name;
  }
  public int getSalary() {
   return salary;
  }
  public void setSalary( int salary ) {
   this.salary = salary;
  }
}

相关文章

  • 收集的一些常用java正则表达式

    收集的一些常用java正则表达式

    收集的一些常用java正则表达式,需要的朋友可以参考一下
    2013-02-02
  • Java实现对象排序的两种方式详解

    Java实现对象排序的两种方式详解

    这篇文章主要介绍了Java实现对象排序的两种方式详解,在Java中经常会涉及到对象数组的排序问题,则就提到对象之间的比较问题,今天我们就来看一下两种不同排序方式之间的区别,需要的朋友可以参考下
    2023-09-09
  • java泛型常用通配符实例解析

    java泛型常用通配符实例解析

    这篇文章主要介绍了java泛型常用通配符实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java中ConcurrentHashMap和Hashtable的区别

    Java中ConcurrentHashMap和Hashtable的区别

    ConcurrentHashMap 和 Hashtable 都是用于在Java中实现线程安全的哈希表数据结构的类,但它们有很多区别,本文就来详细的介绍一下,感兴趣的可以了解一下
    2023-10-10
  • Java线程并发访问代码分析

    Java线程并发访问代码分析

    这篇文章主要介绍了Java线程并发访问代码分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring实现文件上传功能

    Spring实现文件上传功能

    本篇文章主要介绍了Spring实现文件上传功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能

    基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能

    这篇文章主要介绍了基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能,需要的朋友可以参考下
    2021-11-11
  • javaWeb中使用Redis缓存实例解析

    javaWeb中使用Redis缓存实例解析

    这篇文章主要介绍了javaWeb中使用Redis缓存实例解析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 给新来的同事讲where 1=1是什么意思

    给新来的同事讲where 1=1是什么意思

    当遇到多个查询条件,使用where 1=1 可以很方便的解决我们的问题,但这究竟有什么意思呢?所以下面这篇文章主要给大家介绍了关于where 1=1是什么意思,需要的朋友可以参考下
    2021-12-12
  • SpringBoot Admin的简单使用的方法步骤

    SpringBoot Admin的简单使用的方法步骤

    本文主要介绍了SpringBoot Admin的简单使用的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论