最近一直在研究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的应用(一)的更多相关文章

  1. Spring Boot中Spring data注解的使用

    文章目录 Spring Data Annotations @Transactional @NoRepositoryBean @Param @Id @Transient @CreatedBy, @Las ...

  2. Spring boot 中 Spring Security 使用改造5部曲(转)

    文章的内容有点长,也是自己学习Spring security的一个总结.如果你从头看到尾,我想你对Spring Security的使用和基本原理应该会有一个比较清晰的认识. 如果有什么理解不对的地方, ...

  3. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  4. 初识在Spring Boot中使用JPA

    前面关于Spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂 ...

  5. Spring Boot 中使用 jpa

    本文原文版权归 CSDN Hgihness 所有,此处为转载+技术收藏,如有再转请自觉于篇头处标明原文作者及出处,这是大家对作者劳动成果的自觉尊重!! 作者:Hgihness 原文:http://bl ...

  6. spring boot系列(五)spring boot 配置spring data jpa (查询方法)

    接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...

  7. 使用spring boot中的JPA操作数据库

    前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添 ...

  8. Spring Boot 之Spring data JPA简介

    文章目录 添加依赖 添加entity bean 创建 Dao Spring Data Configuration 测试 Spring Boot 之Spring data JPA简介 JPA的全称是Ja ...

  9. Spring Boot 整合Spring Data JPA

    Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...

随机推荐

  1. Unbuntu 自动重启MySQL

    上个月,通过Unbuntu搭建了WordPress,一切运行良好. UBUNTU搭建WORDPRESS-MYSQL-APACHE 但是,最近几天,不知道啥情况,MySQL偶尔会出现Stop:影响了bl ...

  2. 看懂物联网fr

        看懂物联网 2015-10-11 物联网世界 1.第三次IT浪潮 互联网时代的特征是信息驱动了生产力,无论众包.订单式生产这些理论:还是B2C.O2O各类业务模式:归根结底,是信息优化了生产关 ...

  3. yum指令之修复

    折腾着搞 openvpn 网站服务器 yum指令 出了点问题 ------------------------------------------------------------ [root@cl ...

  4. Spring RestTemplate实现服务间的远程调用完整代码示例

    父pom: 服务提供方 pom: provider配置文件: provider启动类: provider实体类: provider Mapper: 内置了增删改查的方法 provider Servic ...

  5. rest_framework之视图

    写一个出版社的增删改查restful接口 models from django.db import models # Create your models here. from django.db i ...

  6. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  7. 【机器学习实战】第2章 K-近邻算法(k-NearestNeighbor,KNN)

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法主要是用来进行分类的. KNN 场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作 ...

  8. 深度探索C++对象模型——关于对象

    引言 以前读<C++ Primer>的时候一直有一种感觉:该书虽然是C++入门书籍,初学者读之却觉晦涩,越往后读越是如此.等到稍加理解后再读该书,顿感醍醐灌顶,茅塞顿开.究其原因,在于原作 ...

  9. 重写strcat函数,以实现strcat的功能

    char * strcatTest(char *dst,const char *src);Action(){ char a[]="come on"; char b[]=" ...

  10. HDU 2147 kiki's game kiki的游戏(博弈,找规律)

    题意: 给一个有n*m 个格子的棋盘,将一个硬币放在右上角一格,每次可以往左/下/左下移动一格,碰到不能移动的局面者输. 思路: 找P/N状态.先将(n,1)归为P状态,那么能一步到达此位置的有3个位 ...