现在的位置: 首页 > 综合 > 正文

JPA学习笔记—JPA实体Bean的建立—链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放

2019年09月15日 ⁄ 综合 ⁄ 共 9382字 ⁄ 字号 评论关闭

3.给上述生成的那个name字段:更改数据库中的字段名,是否为空,字段长度的设定,只需要
  在Person.java文件中,加上
@Column(length=10,nullable=false,name="productname")
//设置字段的长度
public String getName() {
return name;
}
------------------------------------------------------------------
修改后的Person.java
package com.credream.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Person {
private Integer id;
private String name;
//默认构造函数
public Person() {
// TODO Auto-generated constructor stub
}
//构造方法:用来创建该对象时候给那么赋值
public Person(String name) {
this.name=name;
 
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是设置的默认值,可

以不设置:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根据方言智能判断;
//@Id  @GeneratedValue
/*采用数据库的id自增长的时候用的这个注解;提供了多种策略:
1.GenerationType.IDENTITY使用数据库id自增长方式,生成主键
2.TABLE:一张表:一个字段:附一个值,另一个记录id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增长,oracle不可以用自增长
5.auto:根据方言智能判断;
6.auto是设置的默认值,可以不设置:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="productname")
//设置字段的长度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
---------------------------------------------------------------------
4.如果需要修改表的名字不需要默认值的话,只需要修改Person.java
  @Table(name="persondb")
public class Person {
------------------------------------------
修改后的Person.java,可以修改生成表的名字,和字段的长度,名字,是否为空;
package com.credream.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="persondb")
public class Person {
private Integer id;
private String name;
//默认构造函数
public Person() {
// TODO Auto-generated constructor stub
}
//构造方法:用来创建该对象时候给那么赋值
public Person(String name) {
this.name=name;
 
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是设置的默认值,可

以不设置:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根据方言智能判断;
//@Id  @GeneratedValue
/*采用数据库的id自增长的时候用的这个注解;提供了多种策略:
1.GenerationType.IDENTITY使用数据库id自增长方式,生成主键
2.TABLE:一张表:一个字段:附一个值,另一个记录id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增长,oracle不可以用自增长
5.auto:根据方言智能判断;
6.auto是设置的默认值,可以不设置:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="productname")
//设置字段的长度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
-----------------------------------------------------------
5.用实体Bean:Person来存放date类型的数据:
 a.在hibernate中用xml文件是这样做的
   <property name="" length=10 type="date"/>//只保存到日期
   <property name="" length=10 type="datestam"/>//利用时间戳可以保存日期和时间
   datestamp:指的是时间戳
   <property name="" length=10 type="time"/>//只保存时间 
   时间戳是指文件属性里的创建、修改、访问时间
 b.JPA中保存date类型:
   1.在实体Bean:Person中声明date属性,注意用util包下的date
   2.利用注解:
      @Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
   这样可以像数据表中保存日期类型数据
----------------------------------------------
  修改后的Person.java,可以定义表的名字,字段的长度,是否为空,名字,插入日期类型
  package com.credream.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="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
//默认构造函数
public Person() {
 
}
//构造方法:用来创建该对象时候给那么赋值
public Person(String name) {
this.name=name;
 
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是设置的默认值,可

以不设置:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根据方言智能判断;
//@Id  @GeneratedValue
/*采用数据库的id自增长的时候用的这个注解;提供了多种策略:
1.GenerationType.IDENTITY使用数据库id自增长方式,生成主键
2.TABLE:一张表:一个字段:附一个值,另一个记录id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增长,oracle不可以用自增长
5.auto:根据方言智能判断;
6.auto是设置的默认值,可以不设置:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//设置字段的长度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}

}
---------------------------------------------------------
6.像数据库中利用枚举类型保存性别:
 a.在com.credream.bean下新建;
   Gender.java
   package com.credream.bean;

public enum Gender {
MAN,WOMAN
}
 b.在Person.java中添加这个属性:
   private Gender gender=Gender.MAN;//设置数据库中的默认值
   在get方法前写注解:
   @Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//保存的是字符串
   public Gender getGender() {
return gender;
}
  以上配置的话是以varchar的类型保存的,所以要设置这个字段的长度,注意保存枚举值的时 

  候,要设置成不允许为空
  @Enumerated(EnumType.ORDINAL):指的是通过保存,枚举的索引来输入数据库:就是,比如男 

  为0,女为1,哪个是0,1跟在enum枚举中的,书写顺序有关;
--------------------------------------------------------------------
修改后的Person.java
可以保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;
package com.credream.bean;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
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="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
private Gender gender=Gender.MAN;//设置数据库中的默认值
//默认构造函数
public Person() {
 
}
//构造方法:用来创建该对象时候给那么赋值
public Person(String name) {
this.name=name;
 
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是设置的默认值,可

以不设置:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根据方言智能判断;
//@Id  @GeneratedValue
/*采用数据库的id自增长的时候用的这个注解;提供了多种策略:
1.GenerationType.IDENTITY使用数据库id自增长方式,生成主键
2.TABLE:一张表:一个字段:附一个值,另一个记录id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增长,oracle不可以用自增长
5.auto:根据方言智能判断;
6.auto是设置的默认值,可以不设置:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//设置字段的长度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//保存的是字

符串
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}

}
---------------------------------------------------------
7.存放大文本数据:LONGTEXT类型,存放文件进数据库,使用懒加载机制
  比如存放人员的简历;
 a.在Person.java中添加属性:
   private String info;
 b.@Lob//说明字段是大文本数据
public String getInfo() {
return info;
}
 c.在Person.java中添加属性:
   这个属性是用来存放二进制数据的:
   1.private Byte[] file;//用于存放2进制数据的
   2.@Lob @Basic(fetch=FetchType.LAZY)
//用于存放2进制数据的 , @Basic(fetch=FetchType.LAZY)懒加载,如果没有用到
//的话就不会加载,比如不使用file的时候,平常的话,如果查询姓名的时候
//会把所有的那一行的字段取出来,很占用内存,用这个注解后,只是在需要的时候
//才会取出来,这样的话可以节省内存,提高性能
public Byte[] getFile() {
return file;
}
----------------------------------------------
修改后的Person.java
  可以保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数 

  据,可以存放大文本数据,可以存放文件,可以使用懒加载机制
  package com.credream.bean;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="person")
public class Person {
private Integer id;
private String name;
private Date birthday;
private Gender gender=Gender.MAN;//设置数据库中的默认值
private String info;
private Byte[] file;//用于存放2进制数据的
//默认构造函数
public Person() {
 
}
//构造方法:用来创建该对象时候给那么赋值
public Person(String name) {
this.name=name;
 
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)//auto是设置的默认值,可

以不设置:
//@GeneratedValue(strategy=GenerationType.AUTO),5.auto:根据方言智能判断;
//@Id  @GeneratedValue
/*采用数据库的id自增长的时候用的这个注解;提供了多种策略:
1.GenerationType.IDENTITY使用数据库id自增长方式,生成主键
2.TABLE:一张表:一个字段:附一个值,另一个记录id,每次增加都自增一下;
3.SEQUENCE:序列的方式
4.table效率不高,mysql,不可以用序列自增长,oracle不可以用自增长
5.auto:根据方言智能判断;
6.auto是设置的默认值,可以不设置:@GeneratedValue(strategy=GenerationType.AUTO)
*/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false,name="name")
//设置字段的长度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false)//保存的是字

符串
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Lob//说明字段是大文本数据
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Lob @Basic(fetch=FetchType.LAZY)
//用于存放2进制数据的 , @Basic(fetch=FetchType.LAZY)懒加载,如果没有用到
//的话就不会加载,比如不使用file的时候,平常的话,如果查询姓名的时候
//会把所有的那一行的字段取出来,很占用内存,用这个注解后,只是在需要的时候
//才会取出来,这样的话可以节省内存,提高性能
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}

}
注意:一般如果数据超过了1m:就应该使用懒加载;
-------------------------------------------------------
8.不和数据库中的表中的字段相映射的属性创建:
  a.在Person.java中添加字段:这个字段将不会出现在数据库的表中
   private String imagepath;
  b.使用注解:
    @Transient //该属性不会映射到数据库中的字段
public String getImagepath() {
return imagepath;
}
-------------------------------------------------------

抱歉!评论已关闭.