JPA

举报
武师叔 发表于 2022/08/30 08:50:50 2022/08/30
【摘要】 JPA JPA 相关概念 ORM 框架(Object Relational Mapping) 建立 Java 程序实体类与数据库表之间的映射关系。使用 ORM 框架进行编程 Java 程序会根据开发者配置,在运行时自动把数据对象持久化到数据库中,比直接使用 JDBC 编程更为方便和强大。常见的 ORM 框架有 Hibernate, MyBatis 等。 JPA 规范(Java Persis...

JPA


JPA 相关概念

ORM 框架

(Object Relational Mapping) 建立 Java 程序实体类与数据库表之间的映射关系。使用 ORM 框架进行编程 Java 程序会根据开发者配置,在运行时自动把数据对象持久化到数据库中,比直接使用 JDBC 编程更为方便和强大。

常见的 ORM 框架有 Hibernate, MyBatis 等。

JPA 规范

(Java Persistence API) Java 程序和数据库连接的 Java EE 标准,本质上是一种 ORM 规范。使用户不必在 Java 程序中书写 SQL 语句就能直接把数据对象持久化到数据库中,由数据库厂商负责具体实现。

JDBC 和 JPA 的区别

  • JDBC 是面向 SQL 的规范和接口,用户仍需要在 java 程序中书写 SQL 语句。
  • JPA 是直接面向数据对象的规范和接口,可以通过直接操作对象来实现持久化,大大简化了操作的繁杂度。

P.S. Hibernate 是符合 JPA 规范的,而 MyBatis 却不符合,因为 MyBatis 还需要书写 SQL 语句。

https://www.jianshu.com/p/c14640b63653


Spring JPA

Spring 框架中提供了对数据操作的框架 SpringData ; SpringData 框架下则提供了基于 JPA 标准操作数据的模块 SpringData JPA 。

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;

实体类

@Entity 声明实体类,自动对应数据库表(必选)

@Table(name = "AUTH_USER") 声明了数据库实体对应的表名,如果没有默认表名和实体名一致。

属性

@Id 声明属性对应数据库字段是主键。

@Column(length = 32) 用来声明实体属性的表字段的定义。

  1. name - 属性对应数据库字段名,默认和属性名称一致。
  2. length - 属性对应数据库字段长度,默认 255。
  3. 属性对应数据库字段类型会自动推断。
@Entity
@Table(name = "AUTH_USER")
public class UserDO {
    @Id
    private Long id;
    @Column(length = 32)
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}Copy to clipboardErrorCopied

运行时,系统自动将数据表给我们建好了。

我们要实现一个增加、删除、修改、查询功能的持久层服务,那么我只需要声明一个接口,这个接口继承 org.springframework.data.repository.Repository<T, ID> 接口或者他的子接口就行。这里为了功能的完备,我们继承了 org.springframework.data.jpa.repository.JpaRepository<T, ID> 接口。其中 T 是数据库实体类,ID 是数据库实体类的主键。 然后再简单的在这个接口上增加一个 @Repository 注解就结束了。

@Repository
public interface UserDao extends JpaRepository<UserDAO, id> {
}Copy to clipboardErrorCopied

UserDO userDO = new UserDO(); userDO.setId(1L); userDO.setName(“风清扬”);

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。