Spring boot 中Spring data JPA的应用(一)
最近一直在研究Spring Boot,今天为大家介绍下Spring Data JPA在Spring Boot中的应用,如有错误,欢迎大家指正。
先解释下什么是JPA
JPA就是一个基于O/R映射的标准规范(即实体类和数据库中的表的一种对映)
Spring Data JPA是Spring Data 中的一个子项目,除了它还有Spring Data MongoDB等等(刚好最近项目中使用到了,下次可以做个介绍)
在Spring Boot中使用Spring Data JPA非常方便,只需要三步,
1.在maven中添加spring-boot-stater-data-jpa.如下图:
2.在application.properties属性文件中定义好Datasuorce,如下图:
3.创建与数据库中的表对映的实体类和数据访问层(JpaRepository)
一,定义数据库访问层
使用Spring Data JPA建立数据库十分简单,只需要定义一个继承了JpaRepository的接口,如下:
public interface PersonRepository extends JpaRepository<Person, Integer> {}
继承了JpaRepository就相当于有了下面的数据访问操作方法,
@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
List<T> findAll(); List<T> findAll(Sort var1); List<T> findAll(Iterable<ID> var1); <S extends T> List<S> save(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1);
}
二.JPA的查询方法
在JPA中有三种方式可以进行数据的查询(1,方法命名查询 2,@NamedQuery查询 3,@Query查询),
假设有一张表叫PERSON,字段:ID(INT),NAME(VARCHAR),AGE(INT),ADDRESS(VARCHAR).
实体类:id(integer),name(String),age(integer),address(String)
先来介绍第一种:方法命名查询
1. Spring Data JPA支持通过定义在Repository接口的方法来定义查询,方法名字是根据实体类的属性名来确定的,示例如下:
public interface PersonRepository extends Repository<Person, Integer> {
/*
* 通过地址进行查询,参数为address,
* 相当于JPQL:select p from Person p where p.address=?1
* */
List<Person> findByAddress(String address);
/*
* 通过地址和名字进行查询,参数为name,address
* 相当于JPQL:select p from Person p where p.name=?1 and address=?2
* */
Person findByNameAndAddress(String name,String address); }
从代码可以看出,使用findBy,And这样的关键字,其中的findBy可以用find,getBy,query,read来进行代替。
而And就相当于sql语句中的and。
2.用关键字限制结果数量,用top和first来实现,示例如下:
/*
*查询符合条件的前十条记录
*/
List<Person> findFirst10ByName(String name)
/*
*查询符合条件的前30条记录
*/
List<Person> findTop30ByName(String name);
第二种:@NamedQuery查询
Spring Data JPA 支持@NameQuery来定义查询方法,即一个名称映射一个查询语句(要在实体类上写,不是接口里写),示例如下:
@Entity
@NamedQuery(name="Person.findByName",
query="select p from Person p where p.name=?1")
public class Person{ }
这样子就重新定义了findByName这个方法了。
如果要将多个方法都进行重新定义,可以使用@NameQueries标签,示例如下:
@Entity
@NamedQueries({
@NamedQuery(name="Person.findByName",
query="select p from Person p where p.name=?1"),
@NamedQuery(name = "Person.withNameAndAddressNamedQuery",
query = "select p from Person p where p.name=?1 and address=?2")
})
public class Person{ }
这个时候,接口里定义的findByName方法就是上面的方法了,不再是方法命名查询的方法了。
第三种:@Query查询
Spring Data JPA 支持@Query来定义查询方法,使用方法是将@Query写在接口的方法上面,示例如下:
public interface PersonRepository extends Repository<Person, Integer> {
@Query("select p from Person p where p.name=?1 and p.address=?2")
Person withNameAndAddressQuery(String name,String address); }
这里的参数是根据索引号来进行查询的。
当然我们也是可以根据名称来进行匹配,然后进行查询的,示例如下:
public interface PersonRepository extends Repository<Person, Integer> {
@Query("select p from Person p where p.name= :name and p.address= :address")
Person withNameAndAddressQuery(@Param("name")String name,@Param("address")String address);
}
讲完查询,我们再来看看更新是如何写的。
Spring Data JPA支持使用@Modifying和@Query注解组合来进行更新查询,示例如下:
public interface PersonRepository extends Repository<Person, Integer> {
@Modifying
@Transcational
@Query("update Person p set p.name=?1 ")
int setName(String name);
}
int表示的是更新语句所影响的行数。
下篇正在努力编写中,再深入探讨下JPA的其它一些功能。
Spring boot 中Spring data JPA的应用(一)的更多相关文章
- Spring Boot中Spring data注解的使用
文章目录 Spring Data Annotations @Transactional @NoRepositoryBean @Param @Id @Transient @CreatedBy, @Las ...
- Spring boot 中 Spring Security 使用改造5部曲(转)
文章的内容有点长,也是自己学习Spring security的一个总结.如果你从头看到尾,我想你对Spring Security的使用和基本原理应该会有一个比较清晰的认识. 如果有什么理解不对的地方, ...
- Spring Boot中使用 Spring Security 构建权限系统
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...
- 初识在Spring Boot中使用JPA
前面关于Spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂 ...
- Spring Boot 中使用 jpa
本文原文版权归 CSDN Hgihness 所有,此处为转载+技术收藏,如有再转请自觉于篇头处标明原文作者及出处,这是大家对作者劳动成果的自觉尊重!! 作者:Hgihness 原文:http://bl ...
- spring boot系列(五)spring boot 配置spring data jpa (查询方法)
接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...
- 使用spring boot中的JPA操作数据库
前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添 ...
- Spring Boot 之Spring data JPA简介
文章目录 添加依赖 添加entity bean 创建 Dao Spring Data Configuration 测试 Spring Boot 之Spring data JPA简介 JPA的全称是Ja ...
- Spring Boot 整合Spring Data JPA
Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...
随机推荐
- Unbuntu 自动重启MySQL
上个月,通过Unbuntu搭建了WordPress,一切运行良好. UBUNTU搭建WORDPRESS-MYSQL-APACHE 但是,最近几天,不知道啥情况,MySQL偶尔会出现Stop:影响了bl ...
- 看懂物联网fr
看懂物联网 2015-10-11 物联网世界 1.第三次IT浪潮 互联网时代的特征是信息驱动了生产力,无论众包.订单式生产这些理论:还是B2C.O2O各类业务模式:归根结底,是信息优化了生产关 ...
- yum指令之修复
折腾着搞 openvpn 网站服务器 yum指令 出了点问题 ------------------------------------------------------------ [root@cl ...
- Spring RestTemplate实现服务间的远程调用完整代码示例
父pom: 服务提供方 pom: provider配置文件: provider启动类: provider实体类: provider Mapper: 内置了增删改查的方法 provider Servic ...
- rest_framework之视图
写一个出版社的增删改查restful接口 models from django.db import models # Create your models here. from django.db i ...
- 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度
我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...
- 【机器学习实战】第2章 K-近邻算法(k-NearestNeighbor,KNN)
第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法主要是用来进行分类的. KNN 场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作 ...
- 深度探索C++对象模型——关于对象
引言 以前读<C++ Primer>的时候一直有一种感觉:该书虽然是C++入门书籍,初学者读之却觉晦涩,越往后读越是如此.等到稍加理解后再读该书,顿感醍醐灌顶,茅塞顿开.究其原因,在于原作 ...
- 重写strcat函数,以实现strcat的功能
char * strcatTest(char *dst,const char *src);Action(){ char a[]="come on"; char b[]=" ...
- HDU 2147 kiki's game kiki的游戏(博弈,找规律)
题意: 给一个有n*m 个格子的棋盘,将一个硬币放在右上角一格,每次可以往左/下/左下移动一格,碰到不能移动的局面者输. 思路: 找P/N状态.先将(n,1)归为P状态,那么能一步到达此位置的有3个位 ...