SpringDataJPA

SpringDataJPA概述:
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,是在JPA规范下的专门用来进行数据持久化的解决方案,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解

SpringDataJPA特性:
SpringData Jpa 极大简化了数据库访问层代码。使用了SpringDataJpa,我们的dao层中只需要写接口,就自动具有了增删改查、分页查询等方法。

JPA
JPA的全称是Java Persistence API,
是SUN公司推出的一套基于ORM的规范,
内部是由一系列的接口和抽象类构成,
Hibernate是一套成熟的ORM框架,且实现了JPA规范,
JPA通过JDK5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

优势:【标准化、容器级特性的支持、简单方便、查询能力、高级特性】。
1.标准化:
JPA是JCP组织发布的Java EE标准之一,因此任何声称复核JPA标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能在不同的JPA框架下运行。
2.容器级特性的支持:
JPA框架中支持大数据集,事物,并发等容器级事务,这使得JPA超越了简单的持久化框架的局限,在企业应用发挥更大的作用。
3.简单方便
JPA的主要目标之一就是·提供更加简单的编程模型:在JPA框架下创建实体和创建Java类一样简单,没有任何的约束和限制,只需要使用javax.persistence.Entiy进行注释,JPA框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发之阔以很容易掌握。JPA基于非入侵式原则设计,因此阔以很容易和其他框架或者容器集成。
4.查询能力
JPA的查询语言是面向对象而非面向数据库的
5.高级特性
JPA中能够支持面向对象的高级特性,如类之间的继承,多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

如果想使用JPA规范进行操作数据库,底层还需要hibernate作为它的实现类完成数据持久化工作。
JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。

ORM思想:
主要:操作实体类就相当于操作数据库表
需要建立两个映射关系:
实体类和表的映射关系
实体类中属性和表中字段的映射关系
不再重点关注 sql语句
实现了ORM思想的框架: mybatis,hibernate 等

Hibernate是一个开放源代码的对象关系映射框架,
它对JDBC进行了非常轻量级的对象封装,
它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,
Hibernate阔以自动生成SQL语句,自动执行,
使得Java程序员阔以随心所欲的实用对象编程思想来操作数据库。

步骤:
1.搭建环境
spring核心
spring AOP
spring IOC
spring ORM
springDataJPA
hibernate
mysql驱动
log4j日志

2.配置spring的配置文件(配置spring data jpa的整合)
SpringDataJPA

3.编写实体类,使用JPA注解配置映射关系
(只需要编写dao层接口,不需要编写dao层接口的实现类)
SpringDataJPA

4.编写一个符合SpringDateJPA的dao层接口
Dao层接口规范

  1. 需要继承两个接口的(JpaRepository,JpaspecificationExecutor)
  2. 需要提供响应的泛型
    SpringDataJPA

findOne(id):根据id查询
SpringDataJPA

sava(people):插入或者更新(根据传递的实体类对象中,是否包含id属性)
delete(id): 根据id删除
findAll():查询全部

• jpa是面向对象的思想,一个对象就是一个表,强化的是你对这个表的控制。jpa继承的那么多表约束注解也证明了jpa对这个数据库对象控制很注重。
• mybatis则是面向sql,你的结果完全来源于sql,而对象这个东西只是用来接收sql带来的结果集。你的一切操作都是围绕sql,包括动态根据条件决定sql语句等。mybatis并不那么注重对象的概念。只要能接收到数据就好。
面向sql就更利于优化,因为sql可以优化的点太多了。面向对象就更利于移植,因为数据对象不依赖于数据源。俩系统的用户分页语句可能不一样,但是属性都是那么几个。

技术是服务于业务的,只有适合当前业务的技术。

从性能上看,如果只是内部系统,用户量较小的系统,两个框架其实性能上差距不会太明显,这个时候推荐使用springdatajpa 开发效率反而会更高,但是如果是互联网项目,app接口之类的项目,为了追求极致的性能,就应该对两个框架的利弊进行取舍了

上一篇:ORM 技术体系-MyBatis


下一篇:ASP.NET Cookie对象到底是毛啊?(简单小例子)