`
jiagou
  • 浏览: 2540232 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
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;
}
-------------------------------------------------------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics