概述
ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中
之前在实现数据库操作的时候,很多CRUD(增删改查)代码都是重复的,在编写的还是容易出问题
建立类的名称,属性和表名,字段之间的映射关系,实现对对象的操作就是对表的操作的基本思想,既对象映射(Object Relation Mapping)
常见的ORM框架
Hibernate全自动
Mybatis半自动
JFinal
常用的映射方式
映射方式就是储存表和类之间的的对应关系的信息
常用的方式
properties:可以实现但储存方式不方便,数据映射有歧义
xml:通过标签语句建立映射,虽然可以完全表达意思,但是用起来麻烦,
注解:通过类和属性使用注解为其设置映射关系
sun官方提出的java持久化规范JPA(Java Persistence API) )
JPA定义说明
注解 | 解释 |
---|---|
@Entity | 声明类为实体或表。 |
@Table | 声明表名。 |
@Basic | 指定非约束明确的各个字段。 |
@Embedded | 指定类或它的值是一个可嵌入的类的实例的实体的属性。 |
@Id | 指定的类的属性,用于识别(一个表中的主键)。 |
@GeneratedValue | 指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。 |
@Transient | 指定的属性,它是不持久的,即:该值永远不会存储在数据库中。 |
@Column | 指定持久属性栏属性。 |
@SequenceGenerator | 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。 |
@TableGenerator | 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。 |
@AccessType | 这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。 |
@JoinColumn | 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。 |
@UniqueConstraint | 指定的字段和用于主要或辅助表的唯一约束。 |
@ColumnResult | 参考使用select子句的SQL查询中的列名。 |
@ManyToMany | 定义了连接表之间的多对多一对多的关系。 |
@ManyToOne | 定义了连接表之间的多对一的关系。 |
@OneToMany | 定义了连接表之间存在一个一对多的关系。 |
@OneToOne | 定义了连接表之间有一个一对一的关系。 |
@NamedQueries | 指定命名查询的列表。 |
@NamedQuery | 指定使用静态名称的查询。 |
ORM方法论基于三个基本原则
简单:以最基本的形式建模数据
传达性:数据库结构被任何人都能理解的语言文档化
精确性:基于数据模型创建正确标准化的结构
ORM的作用
在关系型数据库和对象之间做一个映射,这样,我们在具体操作数据库的时候,就不需要和复杂的sql语句去打交道了,只需要和平时操作对象一样操作它就行了
持久化是什么
在ORM的概念中提到了一个知识点,对象自动持久化道关系数据库中,
狭义理解持久化:指把域对象永久保存到数据库中,广义理解:持久化包括和数据库相关的各种操作(如CRUD)
持久化就是把数据同步保存到数据库或某种储存设备中
ORM的缺点
1关系,对象映射的实现是以性能为代价,方便了开发,牺牲了效率
2对于复杂的SQL有心无力
3无法完全屏蔽数据库底层的细节,开发人员仍然要熟悉数据库底层操作