2、Hibernate 实体类映射(两种形式)

一、注解配置

    介绍

           @注解配置中,实体类用@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"/>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值