ORM
对象关系映射(ORM)模式是为了解决面向对象与关系数据库存在的互不匹配的现象的技术。也就是说,ORM是通过使用描述对象和数据库之间的元数据,将程序中的对象自动持久化到关系数据库中。
框架:
- Hibernate:映射元数据,面向对象查询数据,支持XML和注解两种元素形式,对象和表映射API操作实体对象,执行CRUD操作。
- TopLink
- ORMLite
- IBATIS
- JPOX
映射方向:
- 单向映射
- 双向映射
映射类型
- 一对一:@OneToOne
- 一对多:@OneToMany
- 多对一:@ManyToOne
- 多对多:@ManyToMany
JPA
Java持久性API(JPA)是Java的一个规范。它用于在Java对象和关系数据库之间保存数据。JPA充当面向对象的领域模型和关系数据库系统之前的桥梁。它使用ORM框架(Hibernate,TopLink或IBatis等)工具实现了JPA数据持久化规范。
JPA简化开发和整合ORM技术,底层实现和切换。
JPA是ORM规范,Hibernate、TopLink是JPA的具体实现。
JPQL
JPQL语言,即Java Persistence Query Language的简称。
JPQL是一种和SQL非常类似的中间性和对象话查询语言,支持以面向对象的方式来写SQL语句,它最终被编译成针对不同底层数据库的SQL查询,从而屏蔽不同数据库的差异。
JPQL的核心API为Query,封装了执行数据库查询的相关方法。
Query
javax.persistence.Query接口封装了执行数据库查询的相关方法。调用EntityManager的createQuery、Create NamedQuery及createNativeQuery方法可获得查询对象,进而调用Query接口的相关方法来执行查询操作。
主要方法:
- int executeUpdate():用于执行 update 或 delete 语句。
- List getResult():用于执行 select 语句并返回结果集实体列表。
- Object getSingleResult():用于执行返回单个结果实体的 select 语句。
- Query setFirstResult(int startPosition):用于设置从指定行数返回查询结果。
- Query setMaxResults(int maxResult):用于设置结果实体的最大数目。
- setParameter(int position, Object value):为查询语句的指定位置参数赋值。下标从 1 开始。
QueryDSL
QueryDSL是一个通用查询框架,与Hibernate等ORM工具不同的,它只是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。
QueryDSL可以通过一组通用的查询api为用户构建出适合不同类型ORM框架或SQL的查询语句。
QueryDSL是基于ORM框架或SQL平台上的一个通用查询框架。借助QueryDSL可以在任何支持的ORM框架或SQL平台上以通用API方式构建查询。
JPA是QueryDSL的主要集成技术,是JPQL和Criteria查询的代替方法。
支持平台:
- JPA
- JDO
- SQL
- Java Collections
- RDF
- Lucence
- Hibernate Search
优势
- 支持代码自动完成
- 几乎避免所有SQL语法错误
- 采用Domain类型的对象和属性来构建查询,查询安全
- 采用纯API作为SQL构建
- 轻松进行增量查询定义