spring data jpa入门学习
本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用。本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data jpa。
(1)spring data jpa是什么?
小菜认为,spring data jpa,一、首先他不是ORM框架,跟hibernate不是同一个东西,hibernate是JPA标准的一个实现;二、它是对JPA进行了封装,并且提供一些基础的操作方法供开发者使用从而简化数据访问层的开发,我们使用spring data jpa 的目的就是为了简化开发。
(2)spring data jpa 对持久层的简化
spring data jpa主要是对持久层进行简化,主要体现在于:只要声明持久层的接口,无需编写具体的逻辑实现。这个原理是:根据方法名字进行解析,从而获取这个方法要执行的操作。例如,findByUserName(String name),我们可以看到他要做的就是根据用户名进行查询。spring data jpa提供了丰富的根据关键字组合进行查询,比如 like 、 not null、by等,如图:

所以我们的持久层就会显得非常精简,先看看一个简单的持久层:

1 package com.lcy.web.systemuser.model;
2
3 import java.util.List;
4
5 import org.springframework.data.domain.Pageable;
6 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
7 import org.springframework.data.jpa.repository.Modifying;
8 import org.springframework.data.jpa.repository.Query;
9 import org.springframework.data.repository.CrudRepository;
10 import org.springframework.data.repository.PagingAndSortingRepository;
11 import org.springframework.stereotype.Repository;
12 import org.springframework.transaction.annotation.Transactional;
13
14 import com.lcy.web.systemuser.pojo.User;
15 @Repository
16 public interface UserRepository extends CrudRepository < User, Long > ,PagingAndSortingRepository<User,Long>, JpaSpecificationExecutor <User>{
17
18
19 @Query(value="select user from User user where competence=0",nativeQuery=false)
20 public List<User> getSystemUsers(Pageable pageable);
21
22 @Query(value="select user from User user where competence=?1")
23 public List<User> getNormalUsers(Integer status);
24 /**
25 * nativeQuery=true 表示采用原生SQL语句进行操作
26 */
27 @Query(value="select * from cms_user where competence=?1",nativeQuery=true)
28 public List<User> getNormalUsersInNativeQuery(Integer status);
29
30 @Modifying //表示修改操作,记得加事务
31 @Query(value="update User user set user.userName=?1 where user.userName=?2 ")
32 public void updateNameByName(String newName,String oldName);
33 public User findByUserNameLike(String userName);
34 }

内容不说,只要看看几点因素,我们看到持久层只是一个接口,具体的方法的实现逻辑都省略到掉了,@Repository注解声明是持久层,主要看看它继承的三个类:
CrudRepository :提供基础的增删改查操作;
PagingAndSortingRepository:分页和排序的操作、
JpaSpecificationExecutor :组合查询条件,提供原生SQL查询
(3)spring data JPA的几个常用的功能:增删改查、自定义SQL语句操作、分页查询
3.1 增删改查
持久层继承CrudRepository,CrudRepository提供了基础的增删改查操作,所以无需在持久层再次编写方法,直接调用即可完成基础的操作,比如:
|
1
2
|
1 userRepository.findAll();2 userRepository.findOne(id); |
3.2自定义SQL语句操作
实际开发中有很多时候还是根据具体的需要进行一些自定义的查询方法或者其他操作,这时候需要开发人员去编写相关的SQL语句,spring data jpa提供了原生SQL语句操作还有面向对象的SQL操作
|
1
|
比如: |

1 @Query(value="select user from User user where competence=?1")
2 public List<User> getNormalUsers(Integer status);
3 /**
4 * nativeQuery=true 表示采用原生SQL语句进行操作
5 */
6 @Query(value="select * from cms_user where competence=?1",nativeQuery=true)
7 public List<User> getNormalUsersInNativeQuery(Integer status);

3.3 分页查询
关键类:Sort、Pageable和Specification,说明:Sort是排序条件组合,Pageable是分页的信息组合(当前页数、每页记录数等),Specification是查询条件的组合。
例如:

1 //1. 排序
2 Sort sort=new Sort(Sort.Direction.ASC, "id");
3 //2.分页条件
4 Pageable pageable=new PageRequest(0, 2, sort);
5 //3.查询条件组合
6 Specification<User> s=new Specification<User>() {
7 @Override
8 public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query,
9 CriteriaBuilder builder) {
10 Path<String> name=root.get("userName");
11 Path<User> competence=root.get("competence");
12 query.where(builder.like(name, "%K%"),builder.equal(competence, "1"));
13 return null;
14 }
15 };
16 //执行
17 Page<User> users=userRepository.findAll(s,pageable);

分页写的一些基础使用的代码,在实际开发中是不会这样写的,不够通用导致代码重复,当然目前已经有了相关的开源项目已经做得很好了,比如江南白衣的springside里面就有对分页做了很好的封装,使用起来非常方便。
简单的spring data jpa就介绍到这里,纯属入门介绍,要深入学习还是看官方文档比较好:
下面是参考资料:
spring data jpa的官方文档:http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/
spring data jpa入门学习的更多相关文章
- Spring Data Jpa 入门学习
本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...
- Spring Data JPA入门及深入
一:Spring Data JPA简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问 ...
- Spring Data JPA 入门Demo
什么是JPA呢? 其实JPA可以说是一种规范,是java5.0之后提出来的用于持久化的一套规范:它不是任何一种ORM框架,在我看来,是现有ORM框架在这个规范下去实现持久层. 它的出现是为了简化现有的 ...
- Spring Data JPA入门
1. Spring Data JPA是什么 它是Spring基于ORM框架.JPA规范封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常用功能, ...
- Spring Data JPA 入门篇
Spring Data JPA是什么 它是Spring基于ORM框架(如hibernate,Mybatis等).JPA规范(Java Persistence API)封装的一套 JPA应用框架,可使开 ...
- Spring Data Jpa --- 入门
一.概述 Spring Data是Spring下的一个子项目,用于简化数据库访问,并支持云服务的开源框架.Spring Data支持NoSQL和 关系数据存储,其主要目标是使得数据库的访问变得方便快捷 ...
- 【ORM框架】Spring Data JPA(一)-- 入门
本文参考:spring Data JPA入门 [原创]纯干货,Spring-data-jpa详解,全方位介绍 Spring Data JPA系列教程--入门 一.Spring Data JPA介 ...
- Spring Data JPA 教程(翻译)
写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...
- 深入浅出学Spring Data JPA
第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...
随机推荐
- ComboBox Control Messages 消息
连接到MSDN,有时间完善这个.具体说明可点击进入msdn CB_ADDSTRING 添加一个字符串组合框的列表框.如果组合框没有cbs_sort风格,字符串添加到列表的结尾.否则,该字符串插入列表, ...
- Ubuntu安装google Gtest
(1) 下载源码:http://code.google.com/p/googletest/gtest-1.7.0 (2013)gtest-1.7.0 (2010) (2) README编译指南126 ...
- WPF简单入门总结
WPF简单总结 最近看了点关于WPF的东西,总结了点点入门的东西. XAML语法基础 1. 定义样式 <Window.Resources><!--窗体资源的定义--> < ...
- 1080. Graduate Admission (30)
时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It is said that in 2013, there w ...
- PowerDesigner 非数值默认值时会自动增加单引单
在PowerDesigner中,如果默认值是非数值型的,那么 PowerDesigner 会默认加上单引号 因此我们需要把这个默认的单引号干掉,如果是需要设置字符串默认值的时候,就手工加上 单引号 即 ...
- TWaver3D入门探索——3D拓扑图之绽放的小球花
这样一簇绚烂丰满艳丽多姿的3D小球花,要多少代码才能完成?其实不足百行,您信吗?下面咱就看一下具体实现过程,让您分分钟学会用TWaver HTML5制作3D拓扑图. 搭建3D空间 首先为花簇的绽放建一 ...
- [转载]汇编eax寄存器和AX,AH,AL之间的关系
00000000 00000000 00000000 00000000|===============EAX===============|---32个0,4个字节,2个字,1个双字 ...
- WPF 位置转化和动画
位置转化 private void DrawScale() { double majorTickUnitValue = this.ScaleSweepLenth / this.MajorDivisio ...
- CyanogenMod刷机以及Google Play应用商店安装方法介绍
http://blog.csdn.net/zcynical/article/details/19241595 写在前面: 本文介绍的方法除第一步外,适用于所有CM系统支持的设备,第一步由于用到了PC上 ...
- linux pts/0的含义
pts是所谓的伪终端或虚拟终端,具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这个新的终端就叫pts /1.比如用who命令查询当前登录的用户,可以看到每个用户的TTY设备 ...