《Hibernate上课笔记》-----class3----Hibernate的单实体映射

简介: 《Hibernate上课笔记》-----class3----Hibernate的单实体映射

一:单实体的对象标识符映射


Hibernate采用对象标识符(OID)区分对象。


OID是关系数据库中主键(通常是代理主键)在Java对象模型中的等价物;

Hibernate采用OID来维持java对象和数据库表中对应关系。

Hibernate允许在持久化类中把OID定义为以下三种类型:Short,Integer,Long

在对象-关系映射配置文件中元素的子元素用来设置OID。<generator >子元素用来指定OID的生成器。

示例:

<class name="User" table="t_user">
        <id name="id" type="int" >
           <column name="id"></column>
           <generator class="identity"></generator>
        </id>
</class>

1.increment关键字

  • increment采用Hibernate数值递增的方式
    hibernate先从数据库中查询出表中id的最大值,然后再向表中插入新纪录,所以表中的id都是连续的.
<class name="User" table="t_user">
        <id name="id" type="int" >
           <column name="id"></column>
           <generator class="increment"></generator>
        </id>
        <property name="userName" column="user_name" type="java.lang.String">
        </property>
       <property name="passWord" type="java.lang.String"></property>      
    </class>

2.identity关键字

  • identity采用数据库提供的自增长方式(需要数据库支持自动增长字段)
    这种方法使用了数据库底层的东西,每次添加的记录都会按照数据库的增加进行增加.id不连续.
 <class name="User" table="t_user">
        <id name="id" type="int" >
           <column name="id"></column>
           <generator class="identity"></generator>
        </id>
        <property name="userName" column="user_name" type="java.lang.String">
        </property>
       <property name="passWord" type="java.lang.String"></property>      
    </class>

3.assigned关键字

  • assigned主键由应用逻辑产生
    这个关键字按照新记录设置的id是多少就会在表中插入多少
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hibernate.entity">
    <class name="User" table="t_user">
        <id name="id" type="int" >
           <column name="id"></column>
           <generator class="assigned"></generator>
        </id>
        <property name="userName" column="user_name" type="java.lang.String">
        </property>
       <property name="passWord" type="java.lang.String"></property>      
    </class>
</hibernate-mapping>

二:使用注解映射单实体

作用:代替配置文件,直接在实体类里声明


@Entity:声明一个实体类.

@Table(name=“table_name”):为实体类指定对应的数据库表.

@Id:声明实体类的OID属性.

@generatedValue(generator=“increment_generator”):声明OID的生成策略.

@GenericGenerator(name=“increment_generator”,startegy=“increment”):使用Hibernate的生成策略.

@Column(name=“columnName”):将属性映射到列.

name="columnName"字段名称;

unique=false 是否在该字段上设置唯一约束;

nullable=true 字段是否能为空;

@Formula:将属性映射到SQL语句.


@Formula(value="(select * from student)")

示例:

package com.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="t_user")
public class User {
  private Integer id;
  private String userName;
  private String passWord;
  @Id
  @GeneratedValue(generator="generator_increment")
  @GenericGenerator(name="generator_increment",strategy="increment")
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  @Column(name="user_name")
  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  @Column(name="password")
  public String getPassWord() {
    return passWord;
  }
  @Formula(value="(select * from student)")
  public void setPassWord(String passWord) {
    this.passWord = passWord;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]";
  }
}

最后小声bb:这个课可能已经传承了10几年了.哭

相关文章
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
66 4
|
4月前
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
93 0
|
4月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
57 0
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
206 0
|
7月前
|
缓存 Java 数据库连接
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
134 0
|
7月前
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
146 0
|
7月前
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
75 0
|
7月前
|
SQL Java 关系型数据库
Hibernate - Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
Hibernate - Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
74 0
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
184 0
|
XML 存储 Java
Hibernate框架【三】——基本映射——一对一映射
Hibernate框架【三】——基本映射——一对一映射
86 0