第一个jpa程序及jpa基础注解

本文介绍了Java Persistence API (JPA)的基础知识,包括如何通过注解将Java对象映射到数据库表,以及如何使用JPA进行数据持久化操作。文中详细解释了实体类的创建过程和各种注解的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jpa介绍
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。它是一组规范(接口),目前Hibernate [1]3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。类似于jdbc也是一组规范,实现则是由MySql,Oracle,SqlServer等数据库厂商来提供,这样就只需要面向提供的接口来进行编程,而不需要关系具体实现。
这里写图片描述

这里写图片描述

第一个jpa程序

1、使用eclipse创建jpa程序
这里写图片描述

版本要选择2.0,默认的2.1是缺少jar包的。

这里写图片描述

如果先前没有创建过jpa程序,这里是需要下载EclipseLink的,点击右方的下载图标选择版本就行。

2、导入jar包
这里写图片描述

3、修改persistence.xml文件
需要选择数据库,选择的orm框架的基本信息(这里选择的是hibernate)。
Connection视图下选择连接数据库
这里写图片描述

Source视图下配置orm框架的基本信息
这里写图片描述

4、实体类

@Entity
@Table(name = "t_user")
public class User {

    @Id//必须指定主键
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(name="user_name")
    private String userName;

    private String password;

    private String telephone;

    private String email;
    //映射必须定义个空构造器
    public User() {
    }
    public User(String userName, String password, String telephone, String email) {
        this.userName = userName;
        this.password = password;
        this.telephone = telephone;
        this.email = email;
    }
    get、set、toString方法
}

jpa的关键就在这个实体类,通过一系列注解就能将该实体类映射到数据库中,注解解释在后。

5、将实体类注册到配置文件
在persistence.xml文件中列出该实体类,需要注意列出的位置顺序。

<class>com.scu.jpa.entity.User</class>

6、测试数据持久化到数据库

  1. 创建EntityManager工厂
  2. 创建EntityManager
  3. 获取事务,开启事务
  4. 执行持久化操作
  5. 提交事务
  6. 关闭EntityManager
public void testPersistence(){
        //创建EntityManagerFactory,需要指定持久化单元name,在persistence.xml中,默认即项目名称
        EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("jpa-2");
        //创建EntityManager
        EntityManager entityManager = managerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        //开始事务
        transaction.begin();
        User user = new User("Tom", "123456", "13822222228", "tom@qq.com");
        //持久化操作
        entityManager.persist(user); 
        //提交事务
        transaction.commit();
        entityManager.close();
    }

执行测试,数据库查看,多出了t_user表,以及插入的数据
这里写图片描述

注解解释

  • Entity:该注解用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表;
  • Table:用来指定该实体类映射到数据库哪张表,name属性用来指定表名,比如上面的例子,映射的表名是”t_user”,默认是与实体类名称一致;
  • Id:顾名思义@Id用来指定主键,数据库表必须有主键,所以这里必须指定不然编译都不能通过;
  • @GeneratedValue:指定主键生成策略,可以通过属性strategy来指定,共有如下4种(Table不介绍)
    1、IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
    2、AUTO: JPA自动选择合适的策略,是默认选项;
    3、SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式;
  • Column:用来表示该字段映射到数据库中的字段名,除了name属性指定字段名外,还可以指定长度,不为null,unique等;
  • Basic:不写@Column注解的话默认是使用@Basic注解,属性名和字段名此时是相同的。
  • Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic;
  • Temporal:在核心的 Java API 中并没有定义 Date 类型的精度(temporal precision). 而在数据库中,表示 Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间,或者两者 兼备). 在进行属性映射时可使用@Temporal注解来调整精度。
    注:这些注解可以添加到属性上也可以添加到get方法上。
    测试@Transient,@Temporal
    比如要对@Transient,@Temporal做测试
    在上面的User实体类中添加个属性,创建时间(create_date),修改构造方法,添加工具方法。
@Entity
@Table(name = "t_user")
public class User {

    @Id//必须指定主键
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(name="user_name")
    private String userName;

    private String password;

    private String telephone;

    private String email;

    @Column(name="create_time")
    @Temporal(TemporalType.DATE)
    private Date createTime;

    //映射必须定义个空构造器
    public User() {
    }

    public User(String userName, String password, String telephone, String email, Date createTime) {
        super();
        this.userName = userName;
        this.password = password;
        this.telephone = telephone;
        this.email = email;
        this.createTime = createTime;
    }
    public String getUserInfo(){
        return "username:"+this.userName+",email:"+this.email;
    }
    get,set,toString方法
}

删除数据库的t_user表,重新测试持久化实体

    public void test1(){
        EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("jpa-2");
        EntityManager entityManager = managerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        //开始事务
        transaction.begin();
        //持久化操作
        User user = new User("Tom", "123456", "13822222228", "tom@qq.com",new Date());
        entityManager.persist(user); 
        transaction.commit();
        entityManager.close();
    }

查看数据库t_user表,添加了创建日期字段,且只显示日期,同时能看到并没有添加UserInfo字段
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值