Hibernate框架学习(第三讲)---Hibernate注解以及ID生成策略

Annotation在项目中的使用越来越多,同样hibernate中支持Annotation,如果在hibernate中使用注解,从而轻XML配置,从下面简单的小例子加以说明。

Hibernate注解

1、实体类Emp.Java

package com.test.hibernate.model;  

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

@Entity  
// 实体类  
public class Emp {  

    private int id;  
    private String name;  

    @Id  
    // 主键  
    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;  
    }  

}  

2、hibernate.cfg.xml文件

<!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="hibernate.connection.url">jdbc:mysql://127.0.0.1/hibernate</property>  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <property name="hibernate.connection.username">root</property>  
        <property name="hibernate.connection.password">root</property>  
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
        <property name="hibernate.show_sql">true</property>  
        <!-- <property name="hibernate.hbm2ddl.auto">update</property> -->  
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>  

    <mapping class="com.test.hibernate.model.Emp"/> <!--使用注解-->  

    </session-factory>  
</hibernate-configuration>  

3、客户端

public class EmpTest {  

    public static void main(String[] args) {  

        //使用注解  
        Configuration config = new AnnotationConfiguration().configure();  
        SessionFactory factory = config.buildSessionFactory();  

        Session session = factory.openSession();  

        Emp emp = new Emp();  
        emp.setId(11);  
        emp.setName("yy");  

        try{  
            session.beginTransaction();  
            session.save(emp);  
            session.getTransaction().commit();  
        }catch(Exception e){  
            session.getTransaction().rollback();  
        }finally{  
            session.close();  
            factory.close();  
        }  
    }  
}  

注意:
在该简单示例中,实体类和数据库表是对应的,字段也是统一的。

如果表名和实体类不一致,则需加如下注解:

@Table(name="_emp")  

如果数据库表中字段名和实体类中字段名保持相同,默认在getXXX方法上加如下注解:

@Basic 

如果数据库表中字段名和实体类中字段名不一致,则需在getXXX方法上加如下注解:

@Column(name="_name")  
    public String getName() {  
        return name;  
    }  

如果某个字段不想持久化,则则getXXX方法上加如下注解:

@Transient  
    public String getName() {  
        return name;  
    }  

对应的,如果在XML配置中不想持久化,则需要在hbm.xml文件中不配置该字段即可。

如果是枚举类型,则需要在getXXX方法上加如下注解:

@Enumerated(EnumType.ORDINAL)  
    public Level getLevel() {  
        return level;  
    } 

此时EnumType.ORDINAL映射字段为整形,如果为EnumType.STRING则映射为varchar类型。

ID生产策略

hibernate中主键的生成策略主要有以下几种:

  • uuid

    原理是使用128位的uuid算法产生主键,从而能够确保网络环境下的一致性。使用此生成策略时,实体类的主键是String类型的,映射成表中字段为varchar。适用所有数据库。

 <id name="id" column="id">  
<generator class="uuid"></generator>  
</id> 
  • native

    原理是根据数据库类型自动选择sequence、identify以及hilo。使用此生成策略时,实体类的主键是int类型的,映射成表中字段为int,若为MySQL,则id自增长。

 <id name="id" column="id">  
    <generator class="native"></generator>  
</id>  
  • identity

    原理是适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识。

  • increment

    用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

  • sequence

    在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。

  • hilo

使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key 和next_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。

使用注解时,默认为:@GeneratedValue ,等同于native策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值