中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Data JPA的配置與使用方法

發布時間:2021-10-20 10:36:12 來源:億速云 閱讀:361 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關Spring Data JPA的配置與使用方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

    首先簡單介紹一下SpringData:Spring Data 項目的目的是為了簡化構建基于 Spring 框架應用的數據訪問計數,包括非關系數據庫、Map-Reduce 框架、云數據服務等等;另外也包含對關系數據庫的訪問支持。

    再介紹一下JPA:Java 持久化 API (JPA)是一個 Java 應用程序接口 規范,描述了使用 Java標準版平臺(Java SE) 和 Java企業版平臺(Java EE)的應用中的 關系數據 的管理。(摘自維基百科)

    現在我們可以來聊一聊Spring Data JPA。從Spring Data的介紹以及JPA的介紹不難看出,Spring Data JPA是使用JPA標準的持久層工具。持久層工具,那就有意思了,我們已經有Hibernate和Mybatis等等好用的持久層工具了,為什么要用Spring Data JPA呢?這是一個好問題,我賣個關子,我們先來看看Spring Data如何與Spring進行整合。

1. Spring整合Spring Data JPA

        1.1 添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

        1.2 配置屬性

#通用數據源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_jpa?charset=utf8mb4&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# Hikari 數據源專用配置
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
# JPA 相關配置
#在 SrpingBoot 2.0 版本中,Hibernate 創建數據表的時候,默認的數據庫存儲引擎選擇的是 MyISAM (之前好像是 InnoDB,這點比較詭異)。這個參數是在建表的時候,將默認的存儲引擎切換為 InnoDB 用的。
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#配置在日志中打印出執行的 SQL 語句信息。
spring.jpa.show-sql=true
#配置指明在程序啟動的時候要刪除并且創建實體類對應的表。這個參數很危險,因為他會把對應的表刪除掉然后重建。所以千萬不要在生成環境中使用。只有在測試環境中,一開始初始化數據庫結構的時候才能使用一次。
spring.jpa.hibernate.ddl-auto=update

    對spring.jpa.hibernate.ddl-auto屬性感興趣的同學,可以去下面這篇博客看看。jpa的hibernate.ddl-auto的幾個屬性值區別。

    1.3 創建實體類

import lombok.Data;

import javax.persistence.*;

/*
 * @Description TODO
 * @author Raindrop
 * @date 2019/8/22 9:10
 */
@Data       //lombok構建Get和Set方法
@Entity     //聲明該類為實體類
@Table(name = "SpringDataJpa")      //該實體類對應的表名
public class Test {
    @Id     //該屬性為主鍵
    @GeneratedValue(strategy =  GenerationType.IDENTITY)        //JPA通用策略生成器
    @Column(name = "id")        //數據表中列名
    private Integer id;

    @Column(name = "username", columnDefinition = "varchar(50) not null")   //數據表中列名以及列類型
    private String username;

    @Column(name = "email", columnDefinition = "varchar(50) not null")   //數據表中列名以及列類型
    private String email;

    @Column(name = "sex", columnDefinition = "varchar(50) not null")   //數據表中列名以及列類型
    private String sex;

    @Column(name = "age", columnDefinition = "varchar(50) not null")   //數據表中列名以及列類型
    private String age;
}

    1.4 創建dao層

          好了,我們的準備工作都已經做完了,接下來我們就可以快樂的進行CRUD了。

          創建Repository類

package run.halo.app.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import run.halo.app.model.entity.*;

import java.util.List;

public interface RaindropUserRepository extends JpaRepository<RaindropUser, Integer> {
    //自定義方法 根據方法名來創建sql語句
    //形成的SQL語句:select * from spring_data_jpa where userName = ?1
    RaindropUser findByUsername(String userName);

    //自定義方法 根據方法名來創建sql語句
    //形成的SQL語句:select * from spring_data_jpa where sex = ?1 and email=?2
    RaindropUser findBySexAndEmail(String sex, String email);

    //切記切記,native的使用方法   JPA使用nativeQuery=true來區分是不是原生SQL
    //以下方法是錯誤的,不可以使用原生的sql,而要是用對應的實體類以及屬性來表示列和表名
    //@Query("select id,username from spring_data_jpa where age < :age")
    @Query("select new run.halo.app.model.entity.RaindropUser(raindrop.id," +
            "raindrop.username,raindrop.email,raindrop.sex," +
            "raindrop.age) from RaindropUser raindrop where raindrop.age < ?1")
    List<RaindropUser> findByLtAge(Integer age);
//    該示例也是錯的
//    @Query("select new run.halo.app.model.entity.RaindropUser(a.id,a.username,a.email,a.sex,a.age) from spring_data_jpa a where age > ?1")
//    RaindropUser findByRtAge(Integer age);
}

    1.5 測試類

    @Test
    public void Test(){
        RaindropUser raindropUser = new RaindropUser();
//        raindropUser.setEmail("123123@gmail.com");
//        raindropUser.setAge(12);
//        raindropUser.setUsername("Raindrop");
//        raindropUser.setSex("man");
//        繼承自JpaRepository類都有一些基礎方法,稍后講解。該方法為保存數據
//        raindropUserRepository.save(raindropUser);
        List<RaindropUser> list = raindropUserRepository.findByLtAge(15);

        System.out.println("List: " + list.get(0));
//        RaindropUser raindropUser1 = raindropUserRepository.findByRtAge(10);
//        System.out.println(raindropUser);
//        System.out.println(raindropUser1);
    }

    1.6 JAP方法解析

        我們在Repository類中定義了findByUsername以及findBySexAndEmail方法,SpringData會根據方法名自動生成SQL語句來執行。

重點詞匯以及生成的SQL語句

KeywordSampleJPQL snippet
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is,EqualsfindByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LessThanEqualfindByAgeLessThanEqual… where x.age ? ?1
GreaterThanfindByAgeGreaterThan… where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1
AfterfindByStartDateAfter… where x.startDate > ?1
BeforefindByStartDateBefore… where x.startDate < ?1
IsNullfindByAgeIsNull… where x.age is null
IsNotNull,NotNullfindByAge(Is)NotNull… where x.age not null
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
StartingWithfindByFirstnameStartingWith… where x.firstname like ?1 (parameter bound with appended %)
EndingWithfindByFirstnameEndingWith… where x.firstname like ?1 (parameter bound with prepended %)
ContainingfindByFirstnameContaining… where x.firstname like ?1 (parameter bound wrapped in %)
OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection ages)… where x.age in ?1
NotInfindByAgeNotIn(Collectionage)… where x.age not in ?1
TRUEfindByActiveTrue()… where x.active = true
FALSEfindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

以上就是Spring Data JPA的配置與使用方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐庐县| 始兴县| 定结县| 尉氏县| 枞阳县| 张家川| 师宗县| 花莲县| 武胜县| 辽宁省| 阿合奇县| 濮阳市| 军事| 通州市| 肇庆市| 栾城县| 隆回县| 宁明县| 石阡县| 台中县| 棋牌| 固阳县| 双鸭山市| 万安县| 淅川县| 静安区| 阿鲁科尔沁旗| 武夷山市| 常宁市| 商丘市| 灵璧县| 静乐县| 民勤县| 彭山县| 江西省| 潼关县| 湘乡市| 晋州市| 平顶山市| 区。| 唐山市|