《Hibernate上课笔记》-----class3

目录

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

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”):将属性映射到列.
    1. name="columnName"字段名称;
    2. unique=false 是否在该字段上设置唯一约束;
    3. 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几年了.哭

上一篇:LeetCode 剑指 Offer 22. 链表中倒数第k个节点


下一篇:递归函数、二分法、三元表达式、列表生成式、字典生成式和匿名函数