最近一直在研究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的其它一些功能。

最新文章

  1. Java集合之HashMap
  2. RedHat Linux RHEL6配置本地YUM源
  3. vim 高亮显示配置
  4. 面向侧面的程序设计AOP-------《一》概述
  5. mysql代码里面有中文注释导致语法错误
  6. Java 对象属性的遍历
  7. Java设计模式---装饰模式
  8. AspNet.WebAPI.OData.ODataPQ
  9. .net core2.0添加json文件并转化成类注入控制器使用
  10. Django 2.0 URL新版配置介绍
  11. Beanshell断言
  12. SpringBoot配置Aop demo
  13. 如何让Snippet Compiler 2008 支持linq
  14. Keras实现简单BP神经网络
  15. [zabbix] zabbix数据采集频率、数据连续多次异常触发、告警次数、告警频率
  16. iOS 使用AFNetworking 设置cookie
  17. js中var a={}什么意思
  18. HDU 4751 Divide Groups (2-SAT)
  19. MySql——查询题目练习
  20. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

热门文章

  1. PHP正则表达式 - 附录(常用正则表达式)
  2. vue2.0:(十)、外卖App商品组件部分和better-scroll
  3. ecshop分类页把分类描述改成FCKeditor编辑器
  4. javascript中两种基本常用排序算法分析
  5. Android Framework中的Application Framework层介绍
  6. android配置android studio not found target android-*.的问题
  7. Mysql的介绍和安装注意
  8. 从SAP客户主数据里直接创建商机(Opportunity)
  9. UVA 11627 Slalom(二分)
  10. Dojo中的选择器