【hibernate框架】uuid与native生成ID的样例-XML配置

简介:

native算法生成随机id:

native
根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。


native算法指定的字段类型:
用mysql,你需要设置主键bigint, autoincreament (大数,自增)
用oracle,你需要设置主键bigint, sequence 
这样才能在hibernate中指定native


Student:

package cn.edu.hpu.model;


public class Student {
	private int id;
	private String name;
	private int age;
	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;
	}
	
	
}



配置文件Student.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="cn.edu.hpu.model">
    <class name="Student" table="stu">
		<id name="id">
			<!--指定uuid算法来让hibernate自动生成id值放入数据库中-->
			<generator class="native"></generator>
		</id>
        <property name="name"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>



hibernate.cfg.xml中加:
 <mapping resource="cn/edu/hpu/model/Student.hbm.xml"/>


测试类:
package cn.edu.hpu.test;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


import cn.edu.hpu.model.Student;


public class StudentTest {
	public static void main(String[] args) {
		Student s=new Student();
		s.setId(12);
		s.setName("s1");
		s.setAge(1);
		
		Configuration cfg=new Configuration();
		SessionFactory sf=cfg.configure().buildSessionFactory();
		
		Session session=sf.openSession();//得到session
		session.beginTransaction();
		session.save(s);
		session.getTransaction().commit();
		session.close();
		sf.close();
		
	}
}


运行测试类后,控制台打出sql语句:
Hibernate: 
    insert 
    into
        stu
        (name, age, id) 
    values
        (?, ?, ?)
数据库生成数据
生成的id:1(如果再加数据,ID自增为2)
原理:
native根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个:


1.identity
对 DB2,MySQL,MS SQL Server,Sybase 和 HypersonicSQL 的内置标识字段提供支持。返回的标识符是 long,short 或者 int 类型的。


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


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


uuid算法生成随机id:

uuid算法指定的字段类型必须是String类型。


Student:

package cn.edu.hpu.model;


public class Student {
	private String id;
	private String name;
	private int age;
	public String getId() {
		return id;
	}
	public void setId(String 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;
	}
	
	
}


配置文件Student.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="cn.edu.hpu.model">
    <class name="Student" table="stu">
		<id name="id">
			<!--指定uuid算法来让hibernate自动生成id值放入数据库中-->
			<generator class="uuid"></generator>
		</id>
        <property name="name"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>


hibernate.cfg.xml中加:
 <mapping resource="cn/edu/hpu/model/Student.hbm.xml"/>


测试类:
package cn.edu.hpu.test;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


import cn.edu.hpu.model.Student;


public class StudentTest {
	public static void main(String[] args) {
		Student s=new Student();
		s.setId("10");
		s.setName("s1");
		s.setAge(1);
		
		Configuration cfg=new Configuration();
		SessionFactory sf=cfg.configure().buildSessionFactory();
		
		Session session=sf.openSession();//得到session
		session.beginTransaction();
		session.save(s);
		session.getTransaction().commit();
		session.close();
		sf.close();
		
	}
}


运行测试类后,控制台打出sql语句:
Hibernate: 
    insert 
    into
        stu
        (name, age, id) 
    values
        (?, ?, ?)
数据库生成数据
生成的id:402881eb4a0f542a014a0f542ae10000
这就是uuid算法生成的id值,里面包含:IP 地址、JVM 的启动时间(精确到 1/4 秒)、系统时间和一个计数器值(在 JVM 中唯一)。


转载请注明出处:http://blog.csdn.net/acmman

相关文章
|
11月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
313 6
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
679 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
454 5
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
516 4
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
321 4
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
220 0
|
6月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
130 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
246 1
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)

相关课程

更多