Hibernate 简介

4 篇文章 0 订阅
4 篇文章 0 订阅

应用程序的分层体系结构


阻抗不匹配


ORM 对象关系映射

对象和关系数据库之间映射的元数据(xml)

功能:

  1. 将对象数据保存到关系数据库的表中
  2. 将关系数据库表中的数据读入到对象中
优势:
  1. 提高生产率
  2. 可维护性
  3. 更好的性能
  4. 厂商独立性
Hibernate的特点:
  1. 优秀成熟的ORM框架
  2. 强大的对象和关系数据库映射
  3. 强大的查询功能
hibernate-core-*.Fimal.jar    Hibernate核心包
antlr-*.jar Hibernate利用它实现从HQL到SQL的转换
dom4j-*.jar 解析XML配置文件和XML映射文件
hibernate-commons-annotation-*.Fial.jar Hibernate注解包
hibernate-jpa-2.1-api-*.Final.jar JPA2.1的接口库
jandex-*.Final.jar 用来索引Annotation
javaassist-*-GA.Jjar Hibernate 动态字节码实现
jboss-logging-*.GA 日志服务通用库
jboss-logging-annotation-*.*实现带注释的接口具体类
jboss-transaction-api_*_spec-*.FinalJTA规范包


hibernate.cfg.xml

Hibernate核心配置文件
配置连接数据库的各种属性
注册对象关系映射文件

Hibernate应用开发步骤:

设计持久化的实体类
  1. setter和getter方法
  2. 公共的无参数构造方法
  3. 对象标识符(OID)的属性
  4. 属性是集合类型,则必须定义成接口类型,如list
  5. 实现Serizabel,可以序列化
配置对象关系映射文件
className.hbm.xml

注册对象关系映射文件

准备好数据库表:根据对象关系映射文件生成DDL,使用SchemaExport类工作
Configuration config=new Configuration().configure(cfg);
SchemaExport se=new SchemaExport(config);
se.create(true,true);

在hibernate配置文件中添加如下代码:
<property name="hibernate.hbm2ddl.auto">create|update</property>

使用Hibernate API进行持久化操作

操作过程:
  1. 创建SessionFactory实例
  2. 获取Session实例
  3. 开启事物
  4. 利用Session实例进行实例化操作
  5. 提交事务
  6. 关闭session
Session类主要用来执行实体的持久化操作
save(Object obj)
update(Object obj)
delete(Object obj)
get(ClassName.class,id)
session.load(ClassName.class,id)

实例:

src/hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url" >
            jdbc:mysql://localhost:3306/students
        </property>

        <property name="connection.username">
            root
        </property>
        <property name="connection.password"></property>
        <!-- DB schema will be updated if needed -->
        <!-- <property name="hbm2ddl.auto">update</property> -->
    <mapping resource="enity/Student.hbm.xml"></mapping>
    </session-factory>

</hibernate-configuration>

enity.Student.java
package enity;

import java.io.Serializable;

/**
 * Created by lenovo on 2016/3/23.
 */
public class Student implements Serializable {
    private static final long servialVersionID=1530127413381718585L;
    private int id;
    private String name;
    private int age;

    public Student() {
    }

    public static long getServialVersionID() {
        return servialVersionID;
    }

    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;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

enity/Student.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
        "//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="enity.Student" table="student">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>
        <property name="age" column="age"/>
    </class>

</hibernate-mapping>

action/HandleDB.java
package action;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import entity.Student;

/**
 * Created by lenovo on 2016/3/23.
 */
public class HandleDB {
    @Test
    public void createTable(){
        Configuration configuration=new Configuration().configure();
        SchemaExport schemaExport=new SchemaExport(configuration);
        schemaExport.create(true,true);
    }
    
    /*
    向数据库中添加一条记录
     */
    @Test
    public void add() {
        Configuration configuration=new Configuration().configure();
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
        ServiceRegistry registry = builder.build();
        SessionFactory factory = configuration.buildSessionFactory(registry);

        Session session=factory.openSession();
        Transaction transaction=session.beginTransaction();

        Student student=new Student();
        student.setName("zhang");
        student.setAge(21);

        try{
            session.save(student);
            transaction.commit();
        }catch (Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally {
            session.close();
        }
    }
}

Configuration类负责管理Hibernate的配置信息并根据信息启动Hibernate
两种配置方法:
属性文件:Hibernate.properties
XML文件:Hibernate.cfg.xml

SessionFactory实例对应一个数据存储源,SessionFactore的特点:
线程安全
重量级

Session接口,持久化管理器,Session的特点:
线程不安全
轻量级
Session称为Hibernate的一级缓存
Session通过SessionFactore打开
与web层的HttpSession没有任何关系

Transaction接口,Hibernate数据库事务接口,包括JDBC API,JTA
Hibernate进行持久化操作(CRUD)时必须进行事务控制

Query接口包装了一个HQL(Hibernate Query Language)查询语句

Criteria擅长实行动态查询操作









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值