星期六, 一月 02, 2016 14:04:55
id生成策略
1.对应项目:hibernate_0400_ID
2.注意:
a)我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)
而是为了明白我们应该建立什么样的表和实体类映射。
3.
id主键:
1)在mysql用自增字段,用auto increatment
在oracle 用 sequence
注意:
对于类里面的对象里的这个值就不可以指定它了。得靠程序(数据库)帮我自动生成;
hibernate或JPA已实现这样的能力,就是通过设置-->告诉它id怎么生成,这样的话,你写程序的时候就不用设这个id了。
----id的生成策略。
测试类:
使用junit进行
约定俗成的 在类的后面加Test是测试类HibernateIDTest
在方法的前面加Test是测试方法
案例:
1.查看文档自动生成id的
看文档的习惯是,先找目录,找不到再进行搜索。
对象/关系数据库映射基础(Basic O/R Mapping)有一个id
<generator class="generatorClass"/>
可的<generator>子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。
uuid university Unicode id 全球唯一的id-----type string
native 会根据数据库为oracle或是mysql进行使用sequence 或是auto_increment
设置了generator,在测试类中就不需要再进行设置了。
对于xml配置文件进行生成uuid
生成的sql
id varchar(255) not nul
代码案例:
/hibernate_0400_ID/src/com/zhuhw/hibernate/model/Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 找不到entity,是因为这个类没改包名 --> <hibernate-mapping package="com.zhuhw.hibernate.model"> <class name="Student"> <!-- id主键;name=id对应的是Student中的getid() --> <id name="id" > <generator class="uuid"></generator> </id> <property name="name"/> <property name="age" /> <!-- hibernater知道了怎么将class与表中的字段对应到一起了 --> </class> </hibernate-mapping>
/hibernate_0400_ID/src/com/zhuhw/hibernate/model/Student.java
package com.zhuhw.hibernate.model; public class Student { /*private int id; public int getId() { return id; } public void setId(int id) { this.id = id; }*/ private String id; 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; } private String name; private int age; }
/hibernate_0400_ID/src/hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <!--<property name="connection.pool_size">1</property>--> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <!--<property name="current_session_context_class">thread</property>--> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/zhuhw/hibernate/model/Student.hbm.xml"/> <mapping class="com.zhuhw.hibernate.model.Teacher"/> </session-factory> </hibernate-configuration>
/hibernate_0400_ID/test/com/zhuhw/hibernate/model/HibernateIDTest.java
package com.zhuhw.hibernate.model; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class HibernateIDTest { public static SessionFactory sf = null; @BeforeClass public static void beforeClass(){ sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @Test public void TestID(){ Student s = new Student(); /*配置文件中使用generator * s.setId(9); * */ s.setName("yuzhou1"); s.setAge(1); Session session = sf.openSession(); session.beginTransaction(); session.save(s); session.getTransaction().commit(); session.close(); } @AfterClass public static void afterClass(){ sf.close(); } }
运行结果:
id varchar(255)
将id生成的是String进行存储的。
先将student表drop掉
使用native
配置文件
<id name="id" >
<generator class="native"></generator>
</id>
在java 类中
将主键设置为int类型即可。
运行结果:
create table Student (
id integer not null auto_increment,
varchar(255), age integer, primary key (id))
相关推荐
### ID生成策略详解 在软件开发中,尤其是数据库应用领域,如何高效且合理地生成唯一标识符(ID)是至关重要的。本文将详细介绍几种常见的ID生成策略:`sequence`、`native`、`identity`、`foreign`等,并探讨它们...
### Hibernate 主键生成策略与配置详解 #### 一、概述 在使用Hibernate进行持久化操作时,合理选择和配置主键生成策略对于确保数据的一致性和优化性能至关重要。本文将详细介绍几种常见的主键生成策略,并结合示例...
这个例子可能包括了如何生成 Entity 类、DAO 接口及其实现,以及 Mapper XML 文件,并且可能展示了如何处理复杂的表关联、主键生成策略等。 总之,自定义 MyBatis 代码生成策略是一项实用的技术,它可以帮助我们...
9. `<columnOverride>`:用于覆盖特定列的默认生成策略,如修改列名、是否生成getter和setter等。 在实际应用中,开发者通常会创建一个generatorConfig.xml模板,然后根据项目需求进行适当的修改。通过运行MyBatis ...
而实体类对应的XML映射文件(如`User.hbm.xml`)则定义了Java类与数据库表之间的映射关系,包括字段类型、主键生成策略等。 生成这些配置文件和映射文件的辅助类通常是为了提高开发效率,避免手动编写这些繁琐的XML...
`generatorConfig.xml` 文件是MyBatis Generator(MBG)工具的核心配置文件,它用于定义如何自动生成Java源代码、XML映射文件以及SQL语句。MBG是一个强大的工具,可以极大地提高开发效率,减少手动编写重复代码的...
### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...
分布式ID生成策略是现代互联网应用中的重要组成部分,尤其是在大数据时代,每个请求、每条记录往往都需要一个全局唯一的标识。Snowflake算法就是一种被广泛使用的分布式ID生成方案,它由Twitter开源,具有时间戳、...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在互联网上数据交换、配置文件、以及数据存储等领域。XML文档数据生成器V1.0版是一款专门针对XML文件制作的工具,它能帮助用户快速、高效地...
**Nhibernate配置生成器**是一个强大的工具,它能够帮助开发者自动化地创建Model层对象以及对应的XML配置文件,极大地简化了Nhibernate在项目中的应用和维护工作。Nhibernate作为一款流行的对象关系映射(ORM)框架...
其中,主键生成策略是Hibernate配置中的一个重要部分,它决定了表中的主键值如何生成。本文将重点介绍在Oracle数据库环境下,使用Hibernate的“native”策略来生成主键的具体方法及注意事项。 #### 二、主键生成...
- 对于超大规模的系统,可以考虑使用多层ID生成策略,比如区域节点+工作节点+序列号。 通过以上步骤,我们可以在SpringBoot项目中成功地集成Vesta ID Generator,为分布式系统提供稳定、高效的全局唯一ID生成方案...
这里的`@Id`注解标记`id`字段为实体的主键,而`@GeneratedValue`注解表示主键生成策略。`GenerationType.IDENTITY`意味着主键值由数据库自动生成,比如在MySQL中,这通常对应于`AUTO_INCREMENT`。 **JPA主键生成...
配置时,需要在引用实体中设置生成策略,如`identity`或`sequence`。 ```xml <id name="id"> </id> ``` #### 2.1.3 一对一连接表单向关联 当两个实体通过第三方连接表关联时,可以使用`<join>`标签。连接表通常...
在Android开发中,XML(eXtensible Markup Language)是一种重要的数据存储和交换格式,它被广泛用于应用程序的配置文件、布局设计以及数据传输。本篇文章将深入探讨Android中的XML生成与解析,帮助开发者更好地理解...
本文将详细介绍Hibernate中五种常用的主键生成策略:assigned、increment、hilo、seqhilo以及native,并探讨它们的特点、应用场景及配置方式。 #### 二、assigned **定义与用途:** - **定义:**assigned策略允许...
### hibernate主键生成策略详解 #### 一、assigned **assigned** 主键生成策略意味着主键的值是由外部程序负责生成的,并且在执行 `save()` 方法之前必须明确指定一个值。在这种策略下,Hibernate 不参与主键的...