JPA学习记录四(了解部分注解并搭建出多类型的数据字段)

xiaoxiao2021-02-28  95

一:首先分析数据表的字段类型

1.id     主键,自增策略设置

2.name    长度为10,不能为空,在数据表列名为personName

3.birthday    类型为Date ,在数据表中时间存放格式为Date

4.gender    类型为枚举类型,在数据表存储的值为枚举值,且默认值为MAN

5.info         类型为String,在数据表类型为大文本类型

6.file        类型为字节类型,在数据表中以二进制存储,并且在不需要时,不进行加载,防止占内存

7.imagepath    不默认放进数据表中

二.创建person类

package cn.zl.jpa.domain; 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; import javax.persistence.Transient; @Entity @Table(name="person") public class Person { private Integer id; private String name; private Date birthday;//1987-12-10 private Gender gender=Gender.MAN;//设置默认值 private String info; public Byte[] file; private String imagepath; @Transient//不将这个属性放入数据库 public String getImagepath() { return imagepath; } public void setImagepath(String imagepath) { this.imagepath = imagepath; } @Lob//存放二进制类型 @Basic(fetch=FetchType.LAZY)//当不访问这个属性时,就不从数据库中装载进内存,防止数据太大,占内存 public Byte[] getFile() { return file; } public void setFile(Byte[] file) { this.file = file; } @Lob//这个注解是为了生成可以存放大文本的数据 public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Enumerated(EnumType.STRING)//枚举类型,保存字符串进数据库,ORDINAL是保存索引值进数据库(0,1) @Column(length=5,nullable=false)//保存枚举类型不能为空,枚举类型中最大长度为5 public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } @Temporal(TemporalType.DATE)//选择时间的格式 //@Column(nullable=false) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Person() { } public Person(String name) { this.name = name; } @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length=10,nullable=false,name="personName") public String getName() { return name; } public void setName(String name) { this.name = name; } }

枚举类型类编写:

package cn.zl.jpa.domain; public enum Gender { MAN,WOMEN }

三.测试编写

package junit.test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.Test; import cn.zl.jpa.domain.Person; public class PersonTest { @Test public void save() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.persist(new Person("哈哈"));//需要在person中定义构造函数,一个无参数的和一个有参数的 em.getTransaction().commit(); em.close(); factory.close(); } }

转载请注明原文地址: https://www.6miu.com/read-75698.html

最新回复(0)