hibernate是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate是啥?相关的知识,希望对你有一定的参考价值。

  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
  Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、
  Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
  Session:
  Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
  SessionFactory:
  SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
  Transaction:
  Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
  Query:
  Query接口让使用者方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
  Criteria:
  Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
  Configuration:
  Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
参考技术A Hibernate是一种ORM(Object Relation Mapping 对象关系映射)框架,是当前最流行的持久化的手段,由于当前的数据库几乎都是关系性的数据库,所以在进行数据库的CRUD操作时,就会涉及到多表联查,对于大型的应用这是一个相当麻烦的一个过程,在这种情况下,Hibernate等持久化框架,被人们开始重视,它是通过把SQL进行封装,然后通过关系映射来实现数据库的访问,其本质更符合面向对象的思想.他的映射策略说白了,就是数据库表格的PK和FK的体现,不过您说的"学生名,课程名,认课教师名"是表的字段,建立关系比较麻烦,我这么给你举例子吧,假如存在三张表stu_table,lession_table,teacher_table,一对一(1:1)比如说学生与学号之间就是一种1:1的关系;一对多(1:N)比如说一个学生可以选修一门(假设)课程,但同一门课程可以被多个同学选修多对多(N:N)比如说一个老师可以叫几门课程,而且每门课程可以有多个老师来教.另外,Hibernate不提倡使用多对多映射 参考技术B 是J2EE的核心技术之一
即使不用写SQL语句也可以操作数据库
把数据库编程与WEB编程划分开
参考技术C 是ORM思想的一种实现 就是对象关系的印射

hibernate中的annotations是啥意思

hibernate中的annotations是什么意思
刚学hibernate,下了一个包hibernate-annotations-3.3.0.GA.zip,还有hibernate-entitymanager-3.3.1.GA.zip,这两个包是“标准”的Hibernate吗? 和“标准”的Hibernate有什么区别?

呵呵。
不知道你想说的“标准”的hibernate代表什么,先听听我说的。
hibernate最开始是想解决java类和关系型数据库的映射问题的,主要是实现数据库操作问题的自动化,结果效果很好,越来越火爆。后来,java的标准委员会从中大受启发,要把这个思想放到java ee的标准里面,就把hibernate的创始人给请去设计jpa标准。java提供的只是一个标准而已,有许多软件厂商去实现,当然肯定是hibernate实现的最好了。
annotation是java后来增加的一种技术,通过注解就可以让代码实现很多功能。例如在类名上加上@table(name="t_teacher")的注解,相应的框架就会自动在数据库里面给你建好对应的表(当然还要配置文件和库支持)。hibernate-annotations-3.3.0.GA.zip是hibernate提供的annotation,一般不用,用java ee自带的就可以了,命名空间是javax.persistence.annotation(不知道有没有打错哦)。
至于hibernate-entitymanager,是hibernate提供ejb3实体管理的jpa实现,使用EJB3持久化的hibernate支持功能。

一般情况下使用hibernate是不需要这两个包的。
参考技术A annotation就是注解的意思,很多配置的信息不用写配置文件里,直接以编码的方式写在代码里,例:
原来是配置文件里需要写实体类与数据库表之间的映射,以面以注解的方式
@Entity
@Table(name="t_user")
public class User
private int id;
private String username;
private String password;
private String email;
private Date birthday;
private Gender gender;
private Org org;
private List <Role> roles = new ArrayList<Role>();
@ManyToMany
@JoinTable(name="t_user_role" ,joinColumns=@JoinColumn(name="u_id"),inverseJoinColumns=@JoinColumn(name="r_id"))
public List<Role> getRoles()
return roles;

public void setRoles(List<Role> roles)
this.roles = roles;

public void setId(int id)
this.id = id;

@Id
@GeneratedValue
public int getId()
return id;

public void setUsername(String username)
this.username = username;

public String getUsername()
return username;

public void setPassword(String password)
this.password = password;

public String getPassword()
return password;

public void setEmail(String email)
this.email = email;

public String getEmail()
return email;

public void setBirthday(Date birthday)
this.birthday = birthday;

@JSON(format="yyyy-MM-dd")
public Date getBirthday()
return birthday;

public void setGender(Gender gender)
this.gender = gender;

@Enumerated(EnumType.STRING)
public Gender getGender()
return gender;

public void setOrg(Org org)
this.org = org;

@ManyToOne
@JoinColumn(name="org_id")

public Org getOrg()
return org;


以上就是annotation强大的地方
不过就是修改没有配置文件的方式方便

以上是关于hibernate是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 的 MariaDB 方言类名称是啥?

(N)Hibernate 中的一级和二级缓存是啥?

hibernate是啥?

Hibernate 中的 transaction.commit() 是啥?

Hibernate @LazyToOne 注释的 JPA 等价物是啥?

Hibernate 的两个配置文件的目的是啥?