Spring Data JPA(1)

1、ORM思想

主要目的:操作实体类就相当于操作数据库表

建立两个映射关系:1)实体类和表的映射关系;2)实体类中属性和表中字段的映射关系

不再重点关注:sql语句

实现了ORM思想的框架:mybatis,hibernate

2、Hibernate框架

Hibernate是一个开放源代码的对象关系映射框架

它对JDBC进行了非常轻量级的对象封装,

它将POJO与数据库表建立映射关系,是一个全自动的orm框架

3、JPA规范

JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。

JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。(类似JDBC规范,有mysql、oracle等驱动)

JPA规范和Hibernate框架的关系

JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。JPA怎么取代Hibernate呢?JDBC规范可以驱动底层数据库吗?答案是否定的,也就是说,如果使用JPA规范进行数据库操作,底层需要hibernate作为其实现类完成数据持久化工作。

4、JPA基本操作

4.1 搭建环境

1)创建maven工程,导入坐标

2)配置jpa的核心配置文件

    位置:配置到类路径下的一个叫做 META-INF 的文件夹下

    命名:persistence.xml

persistence.xml

3)编写客户的实体类

4)配置实体类和表,类中属性和表中字段的映射关系

第一步:配置实体类和表的映射关系,通过类注解:

@Entity:声明实体类

@Table:配置实体类和表的映射关系,属性name为数据库表的名称

第二部:配置类中属性和表中字段的映射关系,通过属性注解

@Id:声明主键的配置

@GeneratedValue:配置主键的生成策略,属性strategy描述:

    GenerationType.IDENTITY :自增(mysql),底层数据库必须支持自动增长

    GenerationType.SEQUENCE:序列(oracle),底层数据库必须支持序列

    GenerationType.TABLE:jpa提供的一种机制,通过一张数据库表(新建)的形式帮助我们完成主键自增

    GenerationType.AUTO:由程序自动的帮助我们选择主键生成策略

@Column:配置属性和字段的映射关系,属性name为数据库表中字段的名称

5)执行测试

4.2 使用步骤

1)加载配置文件创建实体管理器工厂

Persisitence:静态方法(根据持久化单元名称创建实体管理器工厂)createEntityMnagerFactory(持久化单元名称)

作用:创建实体管理器工厂(EntityManagerFactory)

EntityManagerFactory内部维护了很多的内容:维护数据库信息、维护缓存信息、维护所有的实体管理器对象、在创建EntityManagerFactory的过程中会根据配置创建数据库表

EntityManagerFactory的创建过程比较浪费资源,其特点是线程安全的对象,即:多个线程访问同一个EntityManagerFactory不会有线程安全问题,所以在使用JPA编程时,我们可以对EntityManagerFactory 的创建进行优化,只需要做到一个工程只存在一个EntityManagerFactory即可

2)根据实体管理器工厂,创建实体管理器

实体管理器:EntityManager

方法:createEntityManager,获取EntityManager对象

EntityManager是完成持久化操作的核心对象

3)创建事务对象,开启事务

通过EntityManager对象

beginTransaction : 创建事务对象

4)增删改查操作

通过EntityManager对象

presist : 保存

merge  : 更新

remove : 删除

find/getRefrence : 根据id查询,立即加载/延迟加载

5)提交事务

6)释放资源

JPA实现保存

4.3 实现增删改查

1)新增:persist

2)修改:先查询到对象,然后进行修改(merge)

3)删除:先查询到对象,然后进行删除(remove)

4)查询:find(立即加载)、getReference(延迟加载)

4.4 jpql查询

JPQL:全称为:Java Persistence Query Language

其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性

sql:查询的是表和表中的字段

jpql:查询的是实体类和类中的属性

4.4.1 查询步骤

1)编写jqpl语句,创建query查询对象

2)对参数进行赋值

3)查询并得到返回结果集

getSingleResult:获取唯一结果集(聚合函数)

getResultList:直接将查询结果封装为list集合

4.4.2 查询方法

1)查询全部:

sql:select * from user

jpql:from User(实体类类名)

2)分页查询

sql:select * from user limit ?, ?

jqpl:from user 

对query的参数进行赋值:

query.setFirstResult(0);设置起始索引

query.setMaxResults(5);设置每页查询条数

3)统计查询

sql:select count(id) from user

jqpl:select count(id) from User

4)条件查询

sql:select * from user where username like ?

jqpl:from User where username(类中属性名) like ?

对query的参数进行赋值:

query.setParameter(1, "%王%"); 

    第一个参数:占位符的索引参数(从1开始)

    第二个参数:取值

5)排序

sql:select * from userorder by id desc

jpql:from User order by id(类中属性名) desc

你可能感兴趣的:(Spring Data JPA(1))