JPA实体基本映射

               

 

 1.前言

JPA可以使用XML映射文件来管理实体与数据表之间的映射关系,但在实际开发中,绝大部分情况都是采用Annotation来管理实体和数据表的映射关系。本篇着重来讲解一下JPA中采用注解形式来映射实体。

 2.JPA属性注入

2.1.常用注解

@Entity:被该注解修饰的POJO就是一个实体

@Table:该注解反应的是所映射的一个表

@Column:该字段用来修饰多要描述的属性


2.2.@Transient

在默认情况下,实体类的Field会自动映射到数据表的数据列,如果不想映射的话,可以采用该字段修饰。

@Entity@Table(name="news_table")public class News//消息类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; //消息标题 /* @Column指定该Field映射的列信息,此处指定了列名、长度 */ @Column(name="news_title" , length=50private String title; //消息内容 @Transient private String content; //构造器 public News() { } //标识属性的setter和getter方法 public void setId(int id)  {  this.id = id;  } public int getId() {  return (this.id);  } //消息标题的setter方法和getter方法 public void setTitle(String title)  {  this.title = title;  } public String getTitle()  {  return (this.title);  } //消息内容的setter方法和getter方法 public void setContent(String content) {  this.content = content;  } public String getContent() {  return (this.content);  }}

2.3 @Enumerated

有些情况下,实体的Field不是普通的java类型,而是枚举类型,只能接收几个固定的值,于是采用该注解修饰。

枚举类

public enum Season{ 春季,夏季,秋季,冬季}


@Entity@Table(name="news_table")public class News//消息类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; @Enumerated(EnumType.ORDINAL) @Column(name="happen_season"private Season happenSeason;  //happenSeason属性的setter和getter方法 public void setHappenSeason(Season happenSeason) {  this.happenSeason = happenSeason; } public Season getHappenSeason() {  return this.happenSeason; }}


2.4.@Lob、@Basic

有时数据库中需要保存图片,对于这种情况,可以采用Blob、Clob类型的数据保存

JPA使用@Lob Annotation来修饰这种大数据类型,当实体的Field为Byte[]或者Serializable类型时,@Lob修饰的Field将会映射为底层的Blob列;当实体Field为Char[]或者String类型时,将映射为Clob列

@Entity@Table(name="person_table")public class Person//实体类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; /* @Column指定该Field映射的列信息,此处指定了列名、长度 */ @Column(name="person_name" , length=50private String name; @Lob private byte[] pic;}


2.5.@Temporal

在java中表示日期、时间类型只有两种:Date和Calendar,但对于数据库有很多,例如date、time、datetime、timeStamp。在这种情况下,就不知如何映射到数据库了,因此可以采用该注解来说明映射到数据库的类型

@Entity@Table(name="person_table")public class Person//实体类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; /* @Column指定该Field映射的列信息,此处指定了列名、长度 */ @Column(name="person_name" , length=50private String name; @Temporal(TemporalType.DATE) private Date birth;}


2.6.将实体映射到多个表

在有些情况下,希望把一个实体分别映射到多个数据表中,此时不仅仅需哟啊Table来修饰实体,还要使用@SecondaryTable来修饰

@Entity@Table(name="person_table")/* 指定第二个表的表名为person_detail*/@SecondaryTable(name="person_detail" , pkJoinColumns=@PrimaryKeyJoinColumn(name="person_id"))public class Person//实体类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; /* @Column指定该Field映射的列信息,此处指定了列名、长度 */ @Column(name="person_name" , length=50private String name; /* 指定将该列放入新数据表(person_detail)内 */ @Column(table="person_detail", name="email"private String email; /* 指定将该列放入新数据表(person_detail)内 */ @Column(table="person_detail", name="phone"private String phone; }


上面这个例子就把这个实体分别放入到了数据库中的两张表中。


2.7.@Embedded

有些时候,实体属性不是基本数据类型,而是用户自定义的复合属性。这时候可以采用该关键字。

复合属性类

@Embeddablepublic class Catprivate String name; private String color; //无参数的构造器 public Cat() { } //初始化全部属性的构造器 public Cat(String name , String color) {  this.name = name;  this.color = color; } //name属性的setter和getter方法 public void setName(String name) {  this.name = name; } public String getName() {  return this.name; } //color属性的setter和getter方法 public void setColor(String color) {  this.color = color; } public String getColor() {  return this.color; }}

映射类

@Entity@Table(name="person_table")public class Person//实体类的标识属性 @Id /* 用于修饰标识属性 */ /* 指定该主键列的主键生成策略 */ @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; /* @Column指定该Field映射的列信息,此处指定了列名、长度 */ @Column(name="person_name" , length=50private String name; @Column(name="person_email"private String email; @Embedded @AttributeOverrides({  @AttributeOverride(name="name"    , column=@Column(name="cat_name" , length=35)),  @AttributeOverride(name="color"    , column=@Column(name="cat_color"))    }) private Cat cat; }

这样的话,person_table表里面就会有Cat实体类的两个属性作为字段


 3.小结

本篇主要讲解了JPA中的基本属性的映射,主要是几个标签,理解就好。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43747119/article/details/87448038
今日推荐