欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Data?JPA框架的核心概念與Repository接口詳解

 更新時(shí)間:2022年04月27日 16:05:01   作者:嫣夜來(lái)  
Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開(kāi)發(fā)者?極簡(jiǎn)的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作,本篇我們來(lái)了解Spring?Data?JPA框架的核心概念與Repository接口

1 核心概念

Spring Data存儲(chǔ)庫(kù)抽象的中心接口是Repository。它把要管理的實(shí)體類以及實(shí)體類的ID類型作為類型參數(shù)。這個(gè)接口主要是作為一個(gè)標(biāo)記接口,用來(lái)捕捉工作中的類型,并幫助你發(fā)現(xiàn)擴(kuò)展這個(gè)接口的接口。CrudRepository接口為被管理的實(shí)體類提供復(fù)雜的CRUD功能。

自己可以看看Repository的擴(kuò)展接口以及實(shí)現(xiàn)類 IDEA中將光標(biāo)定位在Repository.java文件中, ctrl+h快捷鍵就可以看。

類圖繼承關(guān)系如下:

CrudRepository接口

這個(gè)接口定義了一套CRUD基本操作的方法,使用起來(lái)很方便

CrudRepository接口比較強(qiáng)大的地方在于可以派生方法,什么意思, 舉個(gè)例子

you一張用戶表,如果你想按照某個(gè)字段統(tǒng)計(jì)一下數(shù)量, 這個(gè)實(shí)現(xiàn)的確非常強(qiáng)大。

public interface MemberMapper extends CustomRepository<Member, Long> {
    /** 派生方法按照用戶名統(tǒng)計(jì)人數(shù) */
    Long countByMemberName(String username);
    /** 派生方法按照用戶部門(mén)號(hào)統(tǒng)計(jì)人數(shù) */
    Long countByDeptId(Integer deptId);
}

PagingAndSortingRepository接口

在CrudRepository之上,有一個(gè)PagingAndSortingRepository的抽象,它增加了額外的方法以方便對(duì)實(shí)體類的分頁(yè)查詢?cè)L問(wèn)

2 查詢方法

標(biāo)準(zhǔn)的CRUD功能庫(kù)通常有對(duì)底層數(shù)據(jù)存儲(chǔ)的查詢。使用Spring Data,聲明這些查詢需要4個(gè)步驟:

1】聲明一個(gè)擴(kuò)展Repository或其子接口之一的接口,并指定它應(yīng)該處理的實(shí)體類和ID類型

interface MemberRepository extends Repository<Member, Long> { … }

2】在接口中聲明查詢方法

interface MemberRepository extends Repository<Member, Long> {
  List<Member> findByMembername(String username);
}

3】設(shè)置Spring為這些接口創(chuàng)建代理實(shí)例, 可以使用配置類或xml配置文件的方式來(lái)實(shí)現(xiàn)

通過(guò) 配置類的方式,示例如下:

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EnableJpaRepositories
public class MyConfig {
 }

通過(guò) xml配置文件的方式,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
     https://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/data/jpa
     https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
   <jpa:repositories base-package="com.kkarma.repository"/>
</beans>

本示例中使用的是JPA命名空間。如果你對(duì)任何其他存儲(chǔ)使用存儲(chǔ)庫(kù)抽象,你需要將其修改成你的存儲(chǔ)模塊的對(duì)應(yīng)命名空間聲明。換句話說(shuō),你應(yīng)該把jpa換成其他的存儲(chǔ)類型,例如mongodb。

另外,請(qǐng)注意,JavaConfig配置類并不明確地配置掃描的基礎(chǔ)包,因?yàn)槟J(rèn)情況下會(huì)使用注釋類的包。要自定義要掃描的包,請(qǐng)使用數(shù)據(jù)存儲(chǔ)特定庫(kù)的 @Enable${store}Repositories-annotation 的 basePackage… 屬性之一。什么意思呢,舉例:

如果你的store類型是 mongodb, 就使用@EnableMongoRepositories

@Configuration
@EnableMongoRepositories(*arrayOf("com.kkarma.repository", "com.???.???"))
class PersistenceConfig : AbstractMongoConfiguration() {
}

如果你的store類型是 redis, 就使用@EnableRedisRepositories

如果你的store類型是 jpa, 就使用@EnableJpaRepositories

簡(jiǎn)單配置單個(gè)package,格式如下:

@EnableJpaRepositories("com.spr.repository")

簡(jiǎn)單配置支持多個(gè)package,格式如下:

@EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

4】注入Repository實(shí)例并使用它

@Service
public class MemberServiceImpl implements MemberService {
    private final MemberMapper memberMapper;
    public MemberServiceImpl(MemberMapper memberMapper) {
        this.memberMapper = memberMapper;
    }
    @Override
    public ApiResponse insertMember(Member member) {
        Member user = memberMapper.save(member);
        return ApiResponse.success("新增成功", user);
    }
}

3 后續(xù)內(nèi)容介紹

我們?cè)敿?xì)解釋上面四步操作中的詳細(xì)內(nèi)容。

  • 定義repository接口
  • 定義查詢方法
  • 創(chuàng)建Repository實(shí)例
  • 為Spring Data Repository庫(kù)定制實(shí)現(xiàn)

到此這篇關(guān)于Spring Data JPA框架的核心概念與Repository接口詳解的文章就介紹到這了,更多相關(guān)Spring Data JPA核心概念內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論