01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable

Posted 美好的明天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable相关的知识,希望对你有一定的参考价值。

@Entity

@Entity:映射实体类

@Entity(name="tableName")

  name:可选,对应数据库中一个表,若表名与实体类名相同,则可以省略。

注意:使用@Entity时候必须指定实体类的主键属性。

第一步:建立实体类:

分别给类名上面加上@Entity注解。给类中作为主键的属性的get方法前面加上@Id注解。

package Com.Entity;
import java.util.Date;
import javax.persistence.Entity;/*JPA主键*/
import javax.persistence.Id;
/*学生实体类*/

@Entity(name="Students")
public class Students {
    private int sid;
    private String sname;//姓名
    private String gender;//性别
    private Date birthday;
    private String major;//专业
    private String address;//地址
    
    public Students()
    {
        
    }
    public Students(int sid, String sname, String gender, Date birthday, String major, String address) {
        //super();
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.major = major;
        this.address = address;
    }

    @Id
    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    
}

第二步:在配置中配置好这个类。

第三步:写测试类:

package Com.Entity;
import java.util.EnumSet;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
import org.junit.Test;

public class TestStudents {

    @Test
    public void testSchemaExport()
    {
        //创建服务注册对象
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        //创建Metadata对象
        Metadata metadata =new MetadataSources(serviceRegistry).buildMetadata();
        //创建SchemaExport对象
        SchemaExport export = new SchemaExport();  
        export.create(EnumSet.of(TargetType.DATABASE),metadata);
    }
}

调试后,数据库中正常生成表。

 

@Table

@Table(name="",catalog="",schema="")

@Entity配合使用,只能标注在实体类的class定义处,表示实体对应的数据库表的信息。

name:可选,映射表名称,默认表名和实体名称一致,只有在不一致的情况下需要指定表名。

catalog(目录):可选,表示catalog名称,默认为:catalog("")。

schema(模式):可选,表示schema名称,默认为:schema("")。

 

Table注解实例:对于之前的Entity修改如下:

name:表名前面,schema:默认为使用的数据库名

 

 @Embeddable

表示一个非Entity类可以嵌入到另一个Entity类中作为属性而存在。

相当于代替之前单笔操作的的组件属性

 

第一步:在建一个非entity类,并且在前加上@Embeddable注解。

package Com.Entity;

import javax.persistence.Embeddable;

@Embeddable
/*表示一个嵌入类,在另一个实体类中充当属性*/
public class Address {
    private String postCode;//邮编
    private String address;//地址
    private String phone;
    public Address()
    {
        
    }
    public String getPostCode() {
        return postCode;
    }
    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    
}

第二步:在entity实体类中加入这个类的对象,并且加上set,get方法。

 

第三步:测试:

发现按照要求生成成功。

 

以上是关于01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate注解-类级别注解

Hibernate学习之类级别注解

Hibernate注解配置

spring注解怎么实现的

Spring 使用注解方式进行事务管理

@RequestMapping 注解有什么用?