Hibernate类级别注解

1、Hibernate注解简介

使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置

2、JPA与Hibernate的关系

什么是JPA?
全称Java Persistence API
JPA注解是JAVAEE的规范和标准
JPA与Hibernate的关系:JPA是标准接口,Hibernate是实现,但是其功能是JPA的超集。
Hibernate如何实现与JPA的关系?
通过hibernate-annotation、hibernate-entitymannager和hibernate-core三个组件来实现。
一般在实际开发中,优先考虑使用JPA注解,这样更有利于程序的移植和扩展。

3、Hibernate注解分类

1、类级别的注解
@Entity 、@Table、@Embeddable
  2、属性级别的注解
  3、映射关系注解

4、@Entity

@Entity:映射实体类
  @Entity(name="tableName")
name:可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。
注意:使用@Entity时必须指定实体类的主键属性。
如:
@Entity
public class Students {
	
	private int sid; //学号
	private String sname;//姓名
	private String gender;//性别
	private String major;//专业
	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 String getMajor() {
		return major;
	}
	public void setMajor(String major) {
		this.major = major;
	}
	public Students() {
		super();
	}
	public Students(int sid, String sname, String gender, String major) {
		
		this.sid = sid;
		this.sname = sname;
		this.gender = gender;
		this.major = major;
	}
	@Override
	public String toString() {
		return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", major=" + major + "]";
	}
	
	
}
最后测试出现如下错误:

为解决这个问题我们在students类中的getId上添加@Id表示是主键再进行测试,测试通过


5、@Table

@Table(name="",catalog="",schema="")
 @Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息。
name:可选,映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才需要表名。
catalog :可选,表示Catalog(目录)名称,默认为Catalog("")。
schema:可选,表示Schema(模式)名称,默认为Schema("")。

6、@Embeddable

@Embeddable表示一个非Entity类可以嵌入到另一个Entity类中作为属性而存在。如:
package com.txr.entity;

import javax.persistence.Embeddable;

//地址类

@Embeddable   //表示是一个嵌入类,这个类的对象在另一个实体类中充当属性
public class Address {
	
	private String postCode;//邮编
	private String address;//地址
	private String phone;//联系电话
	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;
	}
	public Address(String postCode, String address, String phone) {
		this.postCode = postCode;
		this.address = address;
		this.phone = phone;
	}
	public Address() {
		super();
	}
	@Override
	public String toString() {
		return "Address [postCode=" + postCode + ", address=" + address + ", phone=" + phone + "]";
	}
	
}
package com.txr.entity;

import javax.persistence.Entity;//JPA注解
import javax.persistence.Id;
import javax.persistence.Table;

//学生实体类


@Entity
@Table(name="t_students",schema="hibernate")
public class Students {
	
	private int sid; //学号
	private String sname;//姓名
	private String gender;//性别
	private String major;//专业
	private Address address;//地址
	
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		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 String getMajor() {
		return major;
	}
	public void setMajor(String major) {
		this.major = major;
	}
	public Students() {
		super();
	}
	public Students(int sid, String sname, String gender, String major,Address add) {
		
		this.sid = sid;
		this.sname = sname;
		this.gender = gender;
		this.major = major;
		this.address=add;
	}
	@Override
	public String toString() {
		return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", major=" + major + "]";
	}
	
	
}

运行后生成的表结构

7、schema与catalog


从实现的角度来看,各种数据库系统对Catalog和Schema的支持和实现方式千差万别。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值