Hibernate框架学习(第三讲)---Hibernate注解以及ID生成策略
2016-12-13 15:15
399 查看
Annotation在项目中的使用越来越多,同样hibernate中支持Annotation,如果在hibernate中使用注解,从而轻XML配置,从下面简单的小例子加以说明。
2、hibernate.cfg.xml文件
3、客户端
注意:
在该简单示例中,实体类和数据库表是对应的,字段也是统一的。
如果表名和实体类不一致,则需加如下注解:
如果数据库表中字段名和实体类中字段名保持相同,默认在getXXX方法上加如下注解:
如果数据库表中字段名和实体类中字段名不一致,则需在getXXX方法上加如下注解:
如果某个字段不想持久化,则则getXXX方法上加如下注解:
对应的,如果在XML配置中不想持久化,则需要在hbm.xml文件中不配置该字段即可。
如果是枚举类型,则需要在getXXX方法上加如下注解:
此时EnumType.ORDINAL映射字段为整形,如果为EnumType.STRING则映射为varchar类型。
uuid
原理是使用128位的uuid算法产生主键,从而能够确保网络环境下的一致性。使用此生成策略时,实体类的主键是String类型的,映射成表中字段为varchar。适用所有数据库。
native
原理是根据数据库类型自动选择sequence、identify以及hilo。使用此生成策略时,实体类的主键是int类型的,映射成表中字段为int,若为MySQL,则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策略。
Hibernate注解
1、实体类Emp.Javapackage 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策略。
相关文章推荐
- 【Hibernate框架开发之四】Hibernate-Annotation常用的注解归总&&ID的生成策略&&联合主键
- 【Hibernate框架开发之四】Annotation注解归总&ID生成策略&联合主键
- 【Hibernate框架开发之四】Hibernate-Annotation常用的注解归总&&ID的生成策略&&联合主键
- 【hibernate框架】用Annotation注解表示id生成策略
- Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略
- Hibernate学习笔记(4)ID生成策略
- hibernate注解(annoation)使用id主键生成策略
- Hibernate学习笔记-ID生成策略
- Hibernate学习笔记_ID生成策略
- hibernate框架学习笔记4:主键生成策略、对象状态
- 注解实现hibernate 主键ID自增长生成策略
- Hibernate-Annotation常用的注解归总&&ID的生成策略&&联合主键
- Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略
- Hibernate 学习笔记-1-3(Hibernate的基本映射以及几种主键生成策略的测试)
- Hibernate注解使用以及Spring整合 , hibernate 自动生成uuid类型的id 注解
- Hibernate学习——(三)ID生成策略介绍
- 【hibernate框架】hibernate的ID的生成策略剖析
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- SS6.1_Hibernate_Hibernate_IdStrategyAnnotation 主键生成策略native Annotation注解的配置方式
- Hibernate学习笔记-ID生成策略