JPA复习(一)——实体类注解

来源:互联网 发布:淘宝接单平台软件下载 编辑:程序博客网 时间:2024/06/05 02:57

最近开始使用spring boot开发微服务,用到了JPA,在编写DAO层代码时,看见老司机用方法名实现增删改查,想到了spring-data+JPA的神奇组合,这两个技术去年8月看尚学堂佟刚老师的视频学到的(地址在最后),现在拿出来复习一下,为以后的开发做准备。
JPA的实体类注解是必需要了解的,以下创建一个User类,来简单说明这些注解的作用

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.TableGenerator;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;/** * 使用注解映射实体类 *  1.字段的注解必须放在get方法上,字段上无效 *  2.如果getter上不加注解,默认使用@Basic注解,即默认字段名,长度 *  3.普通的get方法不生成列,使用@Transient注解 *  4.时间默认的列类型是dateTime类型,使用@Temporal加以区分 * @author Jaynnay * */@Table(name="JPA_USER")@Entitypublic class User {    private Integer id;    private String name;    private Date offTiem;    private Date birthday;    private Date createTime;    @Column(name="USER_ID")    @Id    @TableGenerator(name="table_generator",            table="jpa_id_table",            //下面三列可以唯一确定pk_name=USER_ID那一行的pk_value=1            pkColumnName="pk_name",            pkColumnValue="USER_ID",            valueColumnName="pk_value",            allocationSize=5)    @GeneratedValue(strategy=GenerationType.TABLE,generator="table_generator")    /**@GeneratedValue(strategy=GenerationType.AUTO)*/    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    @Temporal(TemporalType.TIME)    public Date getOffTiem() {        return offTiem;    }    public void setOffTiem(Date offTiem) {        this.offTiem = offTiem;    }    @Temporal(TemporalType.DATE)    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    @Temporal(TemporalType.TIMESTAMP)    public Date getCreateTime() {        return createTime;    }    public void setCreateTime(Date createTime) {        this.createTime = createTime;    }    @Column(name="USER_NAME",length=20,nullable=false)    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    //默认加Basic注解, 生成msg列,但是这是个普通的get方法,不想生成列,就加@Transient    @Transient    public String getMsg() {        return "my name is " + this.name;    }}

以上代码都是以前写的例子代码,现在对上面出现的注解逐一解释一下

@Table:name属性指定表名
@Entity:表明这是一个实体类
@Id:声明主键
@Column(name=”USER_ID”):如果实体类的属性名和表中的字段名不匹配,使用name映射
@GeneratedValue:这里出现了两种
1.GenerationType.AUTO是我们常见的自增
2.strategy=GenerationType.TABLE,generator=”table_generator” 通过一张表的一个字段去充当主键
首先通过@TableGenerator注册一个名叫table_generator的主键生成器,table属性指定一张表,pkColumnName-主键名所在列,pkColumnValue-user表主键的名称,valueColumnName-生成的主键,allocationSize-每次主键增长的值

测试代码

import java.util.Date;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.EntityTransaction;import javax.persistence.Persistence;import cn.sina.entity.User;/** * EntityManagerFactory = SessionFactory * EntityManager =  session *  * @author Jaynnay * */public class JPATest {    public static void main(String[] args) {        //初始化EntityManagerFactory和EntityManager        EntityManagerFactory factory =                Persistence.createEntityManagerFactory("JPA_1_Start");//persistence.xml中的persistence-unit name        EntityManager manager = factory.createEntityManager();        //开启事务        EntityTransaction transaction = manager.getTransaction();        transaction.begin();        User user = new User();        user.setName("peter");        user.setBirthday(new Date());        user.setCreateTime(new Date());        user.setOffTiem(new Date());                //保存        manager.persist(user);        //提交事务        transaction.commit();        //关闭session连接        manager.close();        factory.close();    }}

测试类的注释写的很完善,大家可以慢慢看,不懂的地方请留言
下面是jpa_id_table表和jpa_user表在两次插入之后的结果,验证了allocationSize的作用
这里写图片描述

这里写图片描述

佟刚老师JPA视频下载地址:http://pan.baidu.com/s/1slqMmXR

原创粉丝点击