1、Spring Data JPA 入门

1、Spring Data JPA 入门

1.1、Spring Data JPA概述

1.1.1、Spring Data JPA是什么?

它是Spring基于ORM框架、JPA规范封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用Spring Data JPA可以极大提高开发效率!

1.1.2、 Spring Data JPA 有什么?

1、Spring Data JPA 提供的编程接口
(1) 接口

Repository:最顶层的接口,是一个空接口,目的是为了统一所有的Repository的类型,且能让组件扫描时自动识别。

CrudRepository: Repository的子接口,提供CRUD的功能。

PagingAndSortingRepository:CrudRepository的子接口, 添加分页排序。

JpaRepository:PagingAndSortingRepository的子接口,增加批量操作等。

JpaSpecificationExecutor:用来做复杂查询的接口。
(2) 接口继承关系图


   图1 接口继承关系

1.2、建立项目:用户管理

1.2.1、 搭建“用户管理”项目

1、建立工程
(3) 准备开发工具
开发工具 Eclipse,MySQL数据库,数据库管理工具MySQL Workbench
(4) 创建数据库
建立数据库:usermanage
(5) 在Eclipse中建立Java工程
创建Dynamic Web Project,命名为usermanage
(6) 创建工程包结构
应用重要的几个层次及调用关系:
 
图2 调用关系
用户管理工程包结构安排如下:

icar.chenlong.repository(存放自定义的数据操作接口)

icar.chenlong.model(存放实体模型)

icar.chenlong.service(存放服务层的接口和实现)

icar.chenlong.controller (如果是MVC项目可建立此包,存放控制器)

icar.chenlong.exception(存放异常类)

icar.chenlong.test(存放测试类)
2 、导入所有需要的jar包
所有需要的jar包如下:

Spring 基础jar包

Spring Data Commons jar包

Spring Data JPA jar包

Hibernate 相关 jar包

MySQL数据库连接包

日志相关jar包

其它jar包
3 、配置与编码
(1) 创建配置

配置文件一:applicationContext.xml(Spring上下文)

配置文件二:persistence.xml(管理持久化)
(2) 创建类文件并编码

User.java(用户实体类)

IUserRepository.java(用户的数据接口)

IUserService.java(用户服务接口)

UserServiceImpl.java(接口实现)

UserNotFound.java(异常类,在查询实体未找到时抛出)


类之间的继承关系:
 
图3类之间的继承关系
(3) 实体中常用的注解

● @Entity :声明这个类是一个实体类

@Table:指定映射到数据库的表格

@Id :映射到数据库表的主键属性,一个实体只能有一个属性被映射为主键

@GeneratedValue:主键的生成策略

@Column:定义字段名,若省略该注解,则默认使用属性名当作字段名

1.3、添加、修改、删除查询功能的基本实现

1.3.1、JpaRepository接口方法

● delete删除或批量删除

● findAll查找所有

findOne查找单个

save保存单个或批量保存

saveAndFlush保存并刷新到数据库

其余可查看spring-data-jpa-xxx.RELEASE.jar包源码。

1.4、查询操作的基本实现(排序、分页)

1.4.1、基于方法名解析的概念

JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现。
例如:findByName这个方法表示从数据库中查询Name这个属性等于XXX的所有记录,类似于SQL语句:select * from xxTable where name=xxx这种形式这段话有两个重点:
1、方法名需要在接口中设定;
2、必须符合一定的命名规范;

1.4.2、方法名构造方法

find+全局修饰+By+实体的属性名称+限定词+连接词+ ...(其它实体属性)+OrderBy+排序属性+排序方向。
例如:
findDistinctByFirstNameIgnoreCaseAndLastNameOrderByAgeDesc(String firstName,String lastName){......}
其中:Distinct是全局修饰(非必须),FirstName和LastName是实体的属性名,And是连接词,IgnoreCase是限定词,Age是排序属性,Desc是排序方向,限定词和连接词统称为“关键词”。

1.4.3、目前支持的关键词

常用词如下:
全局修饰:Distinct,Top,First
关键词:IsNull,IsNotNull,Like,NotLike,Containing,In,NotIn,IgnoreCase,Between,Equals,LessThan,GreaterThan,After,Before...
排序方向:Asc,Desc
连接词:And,Or
更多关键词请查看官方在线文档:
http://docs.spring.io/spring-data/jpa/docs/1.8.0.RELEASE/reference/html/

1.4.4、嵌套实体方法命名规则

构词法:主实体中子实体的名称+ _ +子实体的属性名称
例如:List<Person> findByAddress_ZipCode(ZipCode zipCode);

表示查询所有 Address(地址)的zipCode(邮编)为指定值的所有Person(人员)

注:List<Person> findByAddressZipCode(ZipCode zipCode);也是正确的用法,但是由于Spring Data JPA对属性表达式的解析规则存在歧义性,故推荐使用前一种用法。

详细可以参考:http://wujng68.iteye.com/blog/1925132 红色标注的“属性表达式”将对歧义行进行解释。


下载示例项目:

Spring Data JPA入门项目01(添加、修改、删除、查询功能的基本实现)

Spring Data JPA入门项目02(查询操作的基本实现(排序、分页))

注:以上两个项目中Service层的@Transactional注解导入了错误的类,若想事务运行正常,请重新导入“org.springframework.transaction.annotation.Transactional”。



参考: http://www.jikexueyuan.com/course/680.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值