Hibernate简介与实例

一、Hibernate简介

  1、什么是Hibernate?

Hibernate是数据持久层的一个轻量级框架。数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,用面向对象的思想来操作数据库,节省了我们开发处理数据的时间。

  2、Hibernate的优点

1)、使用简洁的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 value(值1,值2,值3,……),而现在的做法是:save(对象)。

2)、使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表

3)、没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。

4)、支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中

  3、当然一个事物,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。比如:若是大量数据批量操作。则不适合使用Hibernate。并且一个持久化对象不能映射到多张表中。

  4、Hibernate中5个核心接口

  1)、Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory

2)、SessionFactory接口:一个SessionFactory对应一个数据源存储,也就是一个数据库对应一个SessionFactory。SessionFactory用来创建Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。

3)、Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。

4)、Query接口:用于数据库的查询对象。

5)、Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。

二、实例:一个Hibernate小程序

  创建一个Hello_World的Java项目,导入所需jar包

  在src目录下,创建一个hibernate.cfg.xml的配置文件,文件配置设置可以参见hibernate的官方文档。

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- 数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- Student为你的数据库名称 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/Student</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate‘s automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>

        <!-- true:在控制台显示SQL语句 -->
        <property name="show_sql">true</property>
        <!-- 格式化输出SQL语句 -->
        <property name="format_sql">true</property>

        <!-- validate 加载hibernate时,验证创建数据库表结构 -->
        <!-- create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。 -->
        <!-- create-drop 加载hibernate时创建,退出是删除表结构 -->
        <!-- update 加载hibernate自动更新数据库结构 -->
        <property name="hbm2ddl.auto">create</property>
        <property name="myeclipse.connection.profile"></property>

        <!-- hibernate与数据库的对象关系映射文件**.hbm.xml -->
        <mapping resource="com/lsj/hibernate/model/Student.hbm.xml" />
        <!-- 使用annotion注解时,hibernate与数据库对象关系映射表示 -->
        <!-- 推荐使用annotion注解来表示映射关系 -->
        <mapping class="com.lsj.hibernate.model.Teacher" />
    </session-factory>

</hibernate-configuration>

  创建一个Teacher的实体类,这里用的是annotion注解,还有一种方法是创建XXX.hbm.xml的关系映射文件

package com.lsj.hibernate.model;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

//Entity是javax.persistence.Entity包中的
@Entity
// 映射的表名
@Table(name = "teacher")
public class Teacher {

    private int id;
    private int age;
    private String name;
    private String title;

    // 主键,一般写在get方法中,而不是在定义中
    @Id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

  创建一个TeacherTest的测试类

package com.lsj.hibernate.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.lsj.hibernate.model.Teacher;

public class TeacherTest {

    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.setAge(30);
        t.setName("小杰");
        t.setTitle("背包客");

        Configuration cfg = new Configuration();
        // 读取hibernate.cfg.xml中的配置
        cfg.configure();
        // 获取SessionFactory
        SessionFactory sf = cfg.buildSessionFactory();
        // 获取Session
        Session session = sf.openSession();
        // 开启事务
        session.beginTransaction();
        // 保存
        session.save(t);
        // 提交事务
        session.getTransaction().commit();
        // 关闭连接
        session.close();
        sf.close();
    }
}

  这样一个简单的Hibernate程序就写完,运行的时候记得打开MySQL的服务。

时间: 2024-10-07 19:29:44

Hibernate简介与实例的相关文章

Hibernate简介与HelloWorld

一.Hibernate简介: 二.Hibernate4 版Hello World 实现 工程结构: com.cy.model.Student: package com.cy.model; public class Student { private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String g

Linux守护进程简介和实例详解

简介 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 下面是linux系统中常见的一些守护进程. amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源管理 Arpwatch:记录日志并构建一个在L

Vue框架简介,实例成员,事件,过滤器,文本、事件和属性指令

目录 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue 为什么要学Vue 如何使用Vue Vue实例成员 1.el: 实例 2.data: 数据 3.methods: 方法 Vue事件 面向对象js Vue过滤器 Vue指令 文本指令 事件指令 属性指令 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue vue框架:渐进式JavaScript框架 ? vue一个环境:可以只控制页面中一个标签,可以控制一组标签,可以控制整个页面,可以控制整个项目

hibernate简介

1.   Hibernate是什么? hibernate是 轻量级的 ORM 框架. ORM全称object/relationmapping [对象/关系映射]. Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间. Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%.对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hiberna

springMVC+spring+hibernate 框架整合实例

先说一下流程思路: 流程讲解1:首先访问会先定位到控制器.这就用到了过滤器配置文件"spring-mvc.xml".这个文件负责定义控制器的包路径.视图的格式等.其次从"控制器->service层->dao层",期间用的都是spring的依赖注入,所以就需要一个bean容器配置文件,将所有的"等待被注入的类"在xml文件里申明一下.这个xml文件就是"spring-beans.xml".之后,dao层要操作enti

1.一起来学hibernate之hibernate简介

一.简介 Hibernate,是一个开源的ORM框架.所谓的ORM,即object relative mapping,就是对象关系映射. 那什么是对象关系映射? 对象,即java类,又称为实体类,对象一般用来存放数据: 关系:即关系型数据库,例如mySQL.oracle.DB2等等都是关系型数据库: 映射:个人理解为对象和数据库的表一一对应的桥梁,即实体对应数据库表,属性对应表中列. 那为什么需要hibernate? hibernate提供一套api供开发者调用,通过api,可以简化对数据库的操

Spring+Struts+Hibernate 简介(转)

http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一.        Struts 1.定义 它是使用 servlet 和 JavaServer Pages 技术的一种 Model-View-Controller 实现, 可帮助您控制Web 项目中的变化并提高专业化水平.“模型-视图-控制 器”(MVC) 就是用来帮助您控制变化的一种设计模式.MVC 减弱了业务逻辑接

ORM进阶之Hibernate 简介及框架搭

上一篇博客讲解了ORM思想,以及ORM的优缺点,并说了ORM有很多的实现方式,我们将以Hibernate为基础来进行讲解. Hibernate是一个基于元数据的轻量级的ORM框架: 1,元数据(Meta Data):data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境. 2,轻量级:占用资源少,没有侵入性.(其实我认为这只是相对而言,如果和Ibatis相比,它到成重量级的了). Hibernate分装了对数据库的操作,让我们由面向数据库编程,变为面向

Hibernate一对多实例

本文向大家介绍Hibernate实例一对多的情况,可能好多人还不了解Hibernate实例一对多,没有关系,下面通过一个实例来帮助您理解Hibernate实例一对多,希望本文能教会你更多东西. 先看由满江红翻译团队(RedSaga Translate Team)翻译的一对多配置说明,然后在看例子一对多关联(One-to-many Associations) 一对多关联 通过外键 连接两个类对应的表,而没有中间集合表. 这个关系模型失去了一些Java集合的语义: 一个被包含的实体的实例只能被包含在