一、注解配置
介绍
@注解配置中,实体类用@Entity注解,用@Table指定对应的数据表,用@Id配置主键,用@Column配置普通属性,用@OneToMany、@ManyToOne、@OneToOne、@ManyToMany配置实体间的关系等。
举例
Cat.java
package com.lhj.bean;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "tb_cat")
public class Cat1 {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createDate")
private Date createDate;
//get、set方法略
}
}
主键映射
配置主键 Hibernate中用@Id声明该列为主键,同时用@Column声明该列的列名。(当列名与属性名相同时,@Column配置可以省略)。@GeneratedValue用于指定主键的生成策略。
主键生成规则 @注解支持四种生成规则:GenerationType.AUTO、GenerationType.TABLE、GenerationType.SEQUENCE、GenerationType.IDENTITY
- GenerationType.AUTO: 自动生成,根据底层数据库自动选择
- GenerationType.TABLE: 使用指定的表来决定主键的取值,一般结合@TableGenerator使用
@Id
@TableGenerator(name = "tb_cat_gen", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tb_cat_gen")
private Integer id;
GenerationType.SEQUENCE:使用Sequence来决定
- GenerationType.IDENTITY
普通属性映射
配置普通属性 普通属性使用@Column 与 @Basic配置。可以省略
@Column 中可指定nullable(是否允许为空)、unique(是否唯一)、insertable(是否允许插入)、updatable(是否允许更新)、length(列长度)、columnDefinition(列类型)、sale(整数长度)、precision(小数点精度)等。如果属性名与对应的列名一直,@Column可以省略。
@Basic 可为普通属性配置的加载方式,默认为及时加载。optional配置该列是否可为null,如果为true表示该属性可选的,可为null。
日期属性的配置
配置日期属性 如果日期属性是java.util.Date类型的,必须要用@Temporal配置日期类型,取值可为 Date(只有年月日等日期信息)、Time(只有时分秒等时间信息)或者Timestemp(既有日期信息,又有时间信息)
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createDate")
private java.util.Date createDate;
配置到 hibernate.cfg.xml 中
<mapping class="com.lhj.bean.***"/>
二、xml配置
介绍
多个实体类可以配置在一个XML文件中。Hibernate推荐用一个同名的XML文件配置一个实体类,便于阅读和维护。XML文件一般以".hbm.xml"结尾,便于辨认,也可以直接用”.xml“结尾。
举例
Cat.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">
<hibernate-mapping package="com.lhj.bean">
<class name="Cat" table="cat">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" type="String" column="name" ></property>
<property name="description" type="text" ></property>
<property name="createDate" type="timestamp" ></property>
</class>
</hibernate-mapping>
主键映射
配置主键 主键用<id />配置,name指定实体类的主键属性,column指定数据表中的主键列名。使用嵌套的<generator />配置主键的生成策略,native表示使用数据库自己的策略。
主键生成规则
- native: 取决于数据库,相当于GenerationType.AUTO
- indentity:使用indentity,相当于GenerationType.IDENTITY
- sequence: 相当于使用GenerationType.SEQUENCE
<id name="id" type="long" column="person_id">
<generator class="sequence">
<param name="sequence">person_id_sequence</param>
</generator>
</id>
increment:自增长类型,由Hibernate而不是数据库维护
- hilo: hi/low算法,使用指定的表给主键赋值
<id name="id" type="long" column="cat_id">
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
- seqhilo: 基于sequence的hilo算法
- uuid
- guid
- assigned:默认值,不使用任何策略,在保存进数据库之前必须使用setter方法赋值
- select:使用数据库触发器赋值
- foreign:使用外键赋值。
普通属性映射
配置普通属性 xml中使用<property />标签配置普通属性。type属性指定列类型,相当于@Column中的columnDefinition。
<property name="salary" precision="2" scale="10" length="255" column="salary" type="String" update="true" insert="true" lazy="false" unique="false" not-null="false">
</property>
日期属性的配置
配置日期属性 在type属性中指定日期类型即可,取值可以为date、time、timestamp
<property name="createDate" type="timestamp"></property>
配置到 hibernate.cfg.xml 中
<mapping resource="com/lhj/bean/***.hbm.xml"/>