全面解析Hibernate框架--小白必看

来源:互联网 发布:电信机顶盒安装软件 编辑:程序博客网 时间:2024/06/16 03:14

欢迎来到zyt.doit.com
哈哈,第一天给大家分享一个持久层框架—–Hibernate

Hibernate, 语义冬眠 .

与数据库打交道的框架 ,我们称之为持久层框架。

介绍几个术语

  1. 持久 把内存中的对象保存到硬盘设备上加以固化。
    持久用到的技术有:文件写入,jdbc操作数据库,orm映射操作数据库。
  2. 对象关系映射ORM 通过一个描述性文件,自动把对象持久化到数据库中。
    Object Relation Mapping。

ORM

一般情况下一个orm框架具备四部分:
一个对持久类对象进行CRUD操作的API—
一个语言或API用来规定与类和类属性相关的查询 —-一般情况下这种orm框架提供的查询语言是用对象查询
一个规定元数据映射的工具 ——通过一个xml格式的文件
一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及、其他的优化功能

Orm主流框架有

Hibernate 免费
开源、性能、稳定性
TopLink
Oracle商业产品
Mybatis 免费
开源、开放性
Apache OpenJpa—jpa
开源、性能、稳定性、支持各种标准规范
企业中用到较多的还是hibernate和Mybatis。

POJO类

POJO(Plain Object Java Object)类也叫做持久化类 要求该类具有一个属性叫做id指向数据库表主键,唯一标识一条记录,必须对属性生成get和set方法,必须有一个无参构造方法。

Hibernate3.X Hibernate4.X

映射和注解两种开发模式。我们采用最新注解方式开发。
Hibernate本身有自己的一套注解,后来基于hibernate做了ejb3.0有一套注解,再后来的JPA为了统一持久层技术框架采用了JPA(SUN公司开发的接口,作为orm框架的规范)注解,是javaee的规范之一。我们后续都会采用jpa注解。

Hibernate开发步骤

1 .引入jar包 采用的hibernate-4.3.1新版本

这里写图片描述

2 .配置hibernate.cfg.xml,写在src下面

<?xml version="1.0"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <!-- 2个注意点,session-factory的name属性必须删除,否则报错,mysql的url后边的参数不能少,否则乱码 --> <session-factory>  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521/orcl</property>  <!-- 设定Oracle的方言,使用InnoDB的存储引擎,支持事务 -->  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property><!-- 配置自动根据实体生成数据库的表 --><property name="hibernate.hbm2ddl.auto">create</property>  <property name="hibernate.connection.username">yantai</property>  <property name="hibernate.connection.password">ok</property>  <!-- 如果数据库中没有和实体类中对应的表,则创建,如果表结构不匹配,则修改表结构 --><!--   <property name="hibernate.hbm2ddl.auto">create</property> -->  <!-- 当前线程保存唯一的一个Session,与spring整合时不可以配置这一项 -->  <property name="hibernate.current_session_context_class">thread</property>  <!-- 显示生成的sql -->  <property name="hibernate.show_sql">true</property>  <!-- 格式化生成的sql -->  <property name="hibernate.format_sql">true</property>  <!-- 添加实体类 -->   <mapping class="ytu.group.entity.User"/> </session-factory></hibernate-configuration>Oracle 方言:<!--org.hibernate.dialect.Oracle10gDialect-->

3.写POJO类

Jpa的id生成策略有auto,increment,sequence,table写完注解pojo之后,要在总的配置文件,加入该类。@Entity@Table(name="tbl_user" ,schema=”yantai”)public class User {    @GeneratedValue(strategy=GenerationType.AUTO)    @Id    private Integer userId;    private String userName;    private int userAge;    private String userAddress;    public Integer getUserId() {        return userId;    }    public void setUserId(Integer userId) {        this.userId = userId;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public int getUserAge() {        return userAge;    }    public void setUserAge(int userAge) {        this.userAge = userAge;    }    public String getUserAddress() {        return userAddress;    }    public void setUserAddress(String userAddress) {        this.userAddress = userAddress;    }

4.开发

//新建一个User对象        User user=new User();        user.setUserAddress("henan");        user.setUserName("xiaofang");        //SessionFactory对象  产生类似于jdbc的statment--session//      读取配置文件        Configuration config=new AnnotationConfiguration();        config=config.configure();      SessionFactory sf=config.buildSessionFactory();        //创建连接  注意不是connection        Session session=sf.openSession();        session.beginTransaction();        session.save(user);        session.getTransaction().commit();          //关闭资源        if(session!=null)        {            session.close();        }        if(sf!=null)        {            sf.close();        }改进后:Hibernate4.0之后产生sessionfactory过程中采用注册服务的方式,给configuration设置一个improvedNameStrategy策略。代码如下://      1.构建工厂        Configuration config=new Configuration();        config = config.configure("hibernate1.cfg.xml").setNamingStrategy(new ImprovedNamingStrategy());        //让产生表的时候表的列名和实体属性名对应关系需要改善为带下划线        SessionFactory sf = config.buildSessionFactory(                new ServiceRegistryBuilder().applySettings(config.getProperties()).build());        Session session = sf.openSession();

注意:

Hibernate配置文件:
create
Create:每次创建sessionfactory都要把原来对应到实体的表全部删除然后在全部创建。
Update:每次都会比较实体和表之间的差异。
去掉这一行:不会根据实体生成表。
导致我们开发有两个方:1).创建实体,然后自动产生表
2).先自己创建表,powerdesigner设计cdm概念模型,然后自动产生物理模型,表。
再反向生成实体

JPA的ID生成策略:

Jpa注解提供四种主键生成策略的配置
主键自动增长 IDENTITY 递增只适合mysql数据库

序列 SEQUENCE 递增只适合oracle数据库

维护主键的表 TABLE
自动选择 AUTO
主键(id)映射
@涉及两个注解Id和@GeneratedValue@Column
使用序列生成id时,对应注解@SequenceGenerator
各种数据库详细配置:
//使用序列的方式,适用oracle等支持序列的数据库
//@GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”pid”)
//@SequenceGenerator(name=”pid”, sequenceName=”pkid”)
//主键自动增长,适用mysql,postgreSQL,sqlite
//@GeneratedValue(strategy=GenerationType.IDENTITY)
//使用一张表来维护id值,更通用,适用所有关系数据库,默认的表名
//为hibernate_sequence
//@GeneratedValue(strategy=GenerationType.TABLE)
//如果使用的是mysql之类的,则自动使用IDENTITY,如果发现是Oracle,
//默认使用序列,序列的名:hibernate_sequence
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Integer id;


hibernate对象的生命周期,session缓存,管理事务,基本的增删改查等下午继续哦。见第二篇博文
吧。

1 0
原创粉丝点击