您的位置:首页 > 其它

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

2013-02-03 23:58 1076 查看
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;

}

-------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐