1.一起来学hibernate之hibernate简介

一、简介

Hibernate,是一个开源的ORM框架。所谓的ORM,即object relative mapping,就是对象关系映射。

那什么是对象关系映射?

  对象,即java类,又称为实体类,对象一般用来存放数据;

  关系:即关系型数据库,例如mySQL、oracle、DB2等等都是关系型数据库;

  映射:个人理解为对象和数据库的表一一对应的桥梁,即实体对应数据库表,属性对应表中列。

那为什么需要hibernate?

  hibernate提供一套api供开发者调用,通过api,可以简化对数据库的操作,可以让开发者不需要写太多的sql语句就能完成对数据库的操作,例如save(entity),那么hibernate会自动生成一条insert into 语句,然后将entity内的数据插入到数据库中;

  hibernate提供不同的方言,不同的方言支持不同的关系型数据库,由于不同的数据库使用起来或多或少都有些不同,如果切换数据库那么很多sql语句必须修改,所以使用hibernate无需修改sql代码,hibernate自身会通过方言生成合适的sql语句,这样就可以达到随心所欲切换数据库;

  当然,hibernate还有很多优点,当然这里仅仅罗列比较出色的优点。

学习hibernate,需要学习什么?

  除了hibernate提供给开发者的api,还需要学习如何配置!

  为什么要配置?

    假如需要将一个实体内的数据插入到数据库表中,数据库如何知道数据是插入哪张表,如何知道插入哪一列?所以配置是为了将实体对应到数据库中指定的表,将实体内属性对应到表中的列。

二、实践(一个小案例)

需求:将实体User内数据存入数据库sys_user表中

环境:

  1.添加jar包

hibernate3.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
hibernate-jpa-2.0-api-1.0.0.Final.jarmysql-connector-java-5.1.5-bin.jar

  2.使用eclipse创建project工程---hibernate

  3.在classpath 创建一个lib文件夹,添加以上jar包,并将jar包add buildpath

  4.创建实体类User

public class User {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }

}

  5.在创建sys_user表

create table sys_user(
    id  int  primary key not null  auto_increment,
    name  varchar(10)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  6.涉及到数据库操作,自然要连接数据库,在classpath下创建hibernate.cfg.xml文件,配置如下:

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

<hibernate-configuration>
    <session-factory name="foo">
        <!-- 配置数据库信息 -->
        <!-- 配置数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 配置数据库url -->
        <property name="connection.url">jdbc:mysql:///hibernate</property>
        <!-- 配置数据库驱动(mysql) -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 配置数据库用户名 -->
        <property name="connection.username">root</property>
        <!-- 配置数据库密码 -->
        <property name="hibernate.connection.password">1208</property>

        <!-- 是否显示sql -->
        <property name="hibernate.show_sql">true</property>

        <!-- 导入映射文件 该文件就是实体与数据库表之间的对应关系-->
        <mapping resource="com/hibernate/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

  7.创建User.hbm.xml映射文件,配置User和sys_user之间的对应关系

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 实体类包路径 -->
<hibernate-mapping package="com.hibernate">
    <!-- 实体的名称、对应表名 -->
    <class name="User" table="sys_user">
        <!-- 主键id、主键id类型、在表中的列名 -->
        <id name="id" type="int" column="id">
            <!-- 自动增长 -->
            <generator class="native"/>
        </id>
        <!-- 实体属性名、实体属性类型、在表中的列名 -->
        <property name="name" type="string" column="name" length="20"/>
    </class>
</hibernate-mapping>

  8.测试程序

public class TestHibernate {

    private static SessionFactory sessionFactory;

    static {
        Configuration cfg = new Configuration(); //用来维护配置文件的类
        cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
        sessionFactory = cfg.buildSessionFactory(); //根据配置文件生成Session工厂
    }

    public static void main(String[] args) {
        User u = new User();
        u.setName("save");

        Session session = sessionFactory.openSession(); //打开一个新的Session
        Transaction tx = session.beginTransaction(); //开始事务,执行操作失败后进行数据回滚
        session.save(u);//保存
        tx.commit(); //提交事务
        session.close(); //关闭Session,释放资源
    }
}

运行结果:

  控制台打印:Hibernate: insert into sys_user (name) values (?)

运行成功!

总结:

  调用save方法,传入实体,hibernate根据配置文件一一对应实体和数据表并生成sql语句对数据库执行操作!

  

    

时间: 2024-11-06 08:21:55

1.一起来学hibernate之hibernate简介的相关文章

Hibernate→ 《Hibernate程序开发》教材大纲

Hibernate ORM 概览 Hibernate 简介 Hibernate 架构 Hibernate 环境 Hibernate 配置 Hibernate 会话 Hibernate 持久化类 Hibernate 映射文件 Hibernate 映射类型 Hibernate 例子 Hibernate O/R 映射 Hibernate 注释 Hibernate 查询语言 Hibernate 标准查询 Hibernate 原生 SQL Hibernate 缓存 Hibernate 批处理 Hibern

Hibernate配置文件——hibernate.cfg.xml

<?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"> <

Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略

Hibernate 加载数据 有get,跟Load 1.懒加载: 使用session.load(type,id)获取对象,并不读取数据库,只有在使用返回对象值才正真去查询数据库. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test    public void  test1()    {        Session session = null;         try {             session = Hiber

Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在数据库中的对象的状态,类似于新New一个对象  离线状态 (detached):    数据库中存在而不被session接管  持久化状态(persistent): 对象被session管理且数据库中存在此对象 1.2. 状态之间转换关系图 2 .状态转换以及Hibernate数据库执行过程详解:

异常:org.hibernate.HibernateException: &#39;hibernate.dialect&#39; must be set when no Connection available

spring整合hibernate报了这样一个异常,一直以为是dialect参数的问题,最后发现原来是配数据源时,数据库的名字写错了....... 找了半天,重新写了配置文件没出问题,但就不知道这个文件哪里出问题了.配置文件里面这种细节一定要注意. 版权声明:本文为博主原创文章,未经博主允许不得转载. 异常:org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available

Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool

1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/development http://download.jboss.org/jbosstools/updates/stable/ 稍等一刻,选择 Hibernate tool 下一步 ,完成后重启Eclipse即可. 2.项目配置文件生成: 2.1 新建一项目,项目右键生成相关配置 然后如图: 2.2 此处需

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]

1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package com.rhythmk.model; import java.util.Date; public

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [One To One]

1.One To One 单相 背景: 古代一个老婆  只能关联一个老公 husband.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.rhythmk.model; public class husband {          public Integer getHusbandId() {         return husbandId;     }     public void setHusba

Hibernate之Hibernate环境配置

Hibernate之Hibernate环境配置 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.11.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-1.1.0.Final.jar j

Rhythmk 学习 Hibernate 09 - Hibernate HQL

1.初始数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Test     public void test01() {         Session session = null;         try {             session = HibernateUtil.getSessionFactory().openSession();             session.begin