spring data 简介(一)

举报
TT-千叶 发表于 2022/12/16 22:36:55 2022/12/16
【摘要】 目录Spring Data 概述JPA Spring Data 概述Spring Data JPA? HelloWorldRepository 接口Repository 子接口Spring Data??Repository 查询方法定义规范spring data 支持的关键字级联查询 Spring Data 概述Spring Data: Spring 的一个子项目。用于简化数据库访问,支持N...

目录

Spring Data 概述

JPA Spring Data 概述

Spring Data JPA? HelloWorld

Repository 接口

Repository 子接口

Spring Data??Repository 查询方法定义规范

spring data 支持的关键字

级联查询


Spring Data 概述

Spring Data: Spring 的一个子项目。用于简化数据库访问,支持NoSQL关系数据库存储。其主要目标是使数据库的访问变得方便快捷。

Spring Data 项目所支持NoSQL存储

- - MongoDB(文档数据库)

- - Neo4j (图形数据库)

- - Redis(键/值存储)

- - Hbase(列族数据库)

Spring Data 项目所支持的关系数据存储技术

- - JDBC

- - JPA

JPA Spring Data 概述

JPA Spring Data: 致力于减少数据访问层(DAO)的开发量。开发者唯一要做的,就只是声明持久层的接口,其他都交给Spring Data JPA 来帮你完成!

框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个UserDao.findUserById()这样一个方法声明,大致应该能判断出这是根据给定条件的ID查询出满足条件的User对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

Spring Data JPA HelloWorld

使用Spring Data JPA进行持久层开发需要的四个步骤:

- 配置Spring 整合 JPA

- 在Spring 配置文件中配置Spring Data ,让Spring 为声明的接口创建代理对象。配置了jpa:repositories后,Spring 初始化容器将会扫描base-package 指定的包目录及其子目录,为继承Repository 或其子接口的接口创建代理对象,并将代理对象注册为Spring Bean ,业务层便可以通过Spring自动封装的特性来直接使用该对象。

- 声明持久层的接口,该接口继承 Repository ,Repository是一个标记型接口,它不包含任何方法,如必要,Spring Data 可实现Repository其他子接口,其中定义了一些常用的增删改查,以及分页相关的方法。

**- 在接口中声明需要的方法。**Spring Data 将根据给定的策略(具体策略稍后讲解)来为其生成实现代码。

Repository 接口

1、Repository是一个空接口,即是一个标记接口

2、若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean 纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法

3、实际上,也可以通**@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class)** 注解来代替 extends Repository<Person, Integer>

20180904170555659.png

20180904170732840.png

Repository 子接口

在eclipse 中选中Repository ,Ctrl + T ,有多个子接口和实现类

20180904171130676.png

继承关系如下:

①、Repository :仅仅是一个标识,表名任何继承它的均为仓库接口类

②、CurdRepository : 继承Repository ,实现了一组CURD相关的方法

③、PagingAndSortingRepository :继承CurdRepository ,实现了一组分页排序相关的方法

④、JpaRepository : 继承PagingAndSortingRepository ,实现一组Jpa 规范相关的方法

⑤、自定义 的 XXXRepository :需要继承JpaRepository ,这样的XxxRepository 接口就具备了通用的数据访问控制层的能力。

⑥、JpaSpecificationExecutor :不属于Repository 体系,实现一组JpaCriteria 查询相关的方法

Spring DataRepository 查询方法定义规范

简单查询条件 :查询某一个实体类或是集合

在Repository 子接口中声明方法:

①、不是随便声明的,而需要符合一定的规范

②、查询方法以 find | read | get 开头

③、涉及条件查询时,条件的属性用条件关键字连接

④、要注意的是:条件属性以首字母大写

**⑤、支持属性的级联查询。若当前类有符合条件的属性,则优先使用,而不使用级联属性。**若需要使用级联属性,则属性之间使用_连接

spring data 支持的关键字

关键字

方法命名

sql where字句

And

findByNameAndPwd

where name= and pwd =

Or

findByNameOrSex

where name= or sex=

Is,Equals

findById,findByIdEquals

where id=

Between

findByIdBetween

where id between and

LessThan

findByIdLessThan

where id <

LessThanEquals

findByIdLessThanEquals

where id <=

GreaterThan

findByIdGreaterThan

where id >

GreaterThanEquals

findByIdGreaterThanEquals

where id > =

After

findByIdAfter

where id >

Before

findByIdBefore

where id <

IsNull

findByNameIsNull

where name is null

isNotNull,NotNull

findByNameNotNull

where name is not null

Like

findByNameLike

where name like

NotLike

findByNameNotLike

where name not like

StartingWith

findByNameStartingWith

where name like ‘%’

EndingWith

findByNameEndingWith

where name like ‘%’

Containing

findByNameContaining

where name like ‘%%’

OrderBy

findByIdOrderByXDesc

where id= order by x desc

Not

findByNameNot

where name <>

In

findByIdIn(Collection<> c)

where id in ()

NotIn

findByIdNotIn(Collection<> c)

where id not in ()

True

findByAaaTue

where aaa = true

False

findByAaaFalse

where aaa = false

IgnoreCase

findByNameIgnoreCase

where UPPER(name)=UPPER()

20180904180007289.png

级联查询

1、创建address 表

20180905105230994.png

2、在person实体类中 添加属性

20180905105307862.png

3、PersonRepository 中

  //where address.id >?
	List<Person> getByAddressIdGreaterThan(Integer id);

4、测试类里面进行测试

①、先要测试是否生成数据表

//生成数据表
	@Test
	public void testJpa(){
		
	}

②、测试查询

//级联查询
	@Test
	public void testWords2(){
		List<Person> persons = personRepository.getByAddressIdGreaterThan(1);
		System.out.println(persons);
	}

③、结果 为[ ] 是因为 数据表里没有数据,只有字段

20180905105515859.png

如若:

person实体类中本来就含有一个address_id

20180905110959962.png

在执行级联查询的方法,会报错如下:

在映射的时候列名重复

2018090511111981.png

更改如下:

20180905111220544.png

运行结果:

20180905111504933.png

含义:支持属性的级联查询。若当前类有符合条件的属性,则优先使用,而不使用级联属性。若需要使用级联属性,

则属性之间使用_连接

 //where address.id >?
	List<Person> getByAddress_IdGreaterThan(Integer id);

查询结果: 连表查询

20180905111851755.png

以上是从某视频处所学!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。