Java Persistence API,即JPA,是一种面向对象的,轻量级的,使用Java编程语言规范的ORM框架,用于将Java对象映射到关系数据库中。ORM是指对象关系映射,简单来说,它是一种程序设计技术,用于将面向对象语言程序中的对象和关系数据库系统中的表结构相对应,以实现数据的自动持久化。在Java EE应用程序中,JPA 替代了 Enterprise JavaBeans(EJB) 作为 Java 持久化规范的标准。
一、JPA基本概念
1、实体类
实体类是指用注解@Entity来标注的pojo,它在关系型数据库中对应着一张表。实体类中的属性则映射为该表中的字段。当我们进行增删改查操作使,我们需要操作的对象就是实体类。
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name = "name") private String name; @Column(name = "age") private int age; @Column(name = "gender") private String gender; //getter和setter方法省略 }
2、属性
一个实体类中的属性就对应着该类表中的一列数据。在JPA中,我们可以根据我们的需要用一些注解来对属性进行注解。
3、主键
在关系型数据库中,主键是一张表中用来唯一标识每行数据的字段。在JPA中,我们可以通过注解@Id和@GeneratedValue来来定义主键。
二、JPA常用操作
1、增删改查
//插入实体类对象,返回持久化后的实体类对象 publicT save(T entity); //根据实体类主键查询,返回该实体类对象 public T findByPrimaryKey(Class clazz, Object primaryKey); //查询所有实体类对象,返回该实体类对象列表 public List findAll(Class clazz); //更新实体类对象,返回持久化后的实体类对象 public T update(T entity); //删除实体类对象 public void delete(T entity);
2、事务管理
对于JPA的增删改查操作,我们通常都要在事务中进行,这样保证数据的一致性。
@PersistenceContext private EntityManager entityManager; @Transactional public void update(User user) { entityManager.merge(user); }
三、JPA优缺点
优点:
1、简化数据持久化操作:通过JPA,我们可以使用面向对象的方式来进行数据库操作,不需要书写SQL语句。
2、跨数据库支持良好:通过JPA,我们可以用一套 API 实现不同的ORM 框架,并且它支持跨数据库的数据源。
3、ORM映射灵活性高:我们可以在实体类中使用注解对属性进行注解来达到自定义 ORM 映射的目的。
缺点:
1、性能问题:在大规模数据操作时,因为JPA会动态生成SQL语句,因此性能上可能不如手写 SQL 语句。
2、学习成本高:JPA架构和实现比较复杂,学习成本相对高。
3、数据库操作完全依赖于JPA提供的ORM映射,开发人员无法针对数据库进行手工调优。
四、总结
以上是对JPA的基本概念及其常用操作的介绍。虽然JPA对于开发人员来说学习成本相对较高,但是它给我们带来的便利性也是不可替代的,特别是对于需要频繁和不同数据库进行操作的企业应用程序来说,JPA的优势更是显而易见。