本篇文章給大家分享的是有關(guān)Spring Data JPA的配置與使用方法,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)公司是專業(yè)的丘北網(wǎng)站建設(shè)公司,丘北接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行丘北網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
首先簡(jiǎn)單介紹一下SpringData:Spring Data 項(xiàng)目的目的是為了簡(jiǎn)化構(gòu)建基于 Spring 框架應(yīng)用的數(shù)據(jù)訪問計(jì)數(shù),包括非關(guān)系數(shù)據(jù)庫、Map-Reduce 框架、云數(shù)據(jù)服務(wù)等等;另外也包含對(duì)關(guān)系數(shù)據(jù)庫的訪問支持。
再介紹一下JPA:Java 持久化 API (JPA)是一個(gè) Java 應(yīng)用程序接口 規(guī)范,描述了使用 Java標(biāo)準(zhǔn)版平臺(tái)(Java SE) 和 Java企業(yè)版平臺(tái)(Java EE)的應(yīng)用中的 關(guān)系數(shù)據(jù) 的管理。(摘自維基百科)
現(xiàn)在我們可以來聊一聊Spring Data JPA。從Spring Data的介紹以及JPA的介紹不難看出,Spring Data JPA是使用JPA標(biāo)準(zhǔn)的持久層工具。持久層工具,那就有意思了,我們已經(jīng)有Hibernate和Mybatis等等好用的持久層工具了,為什么要用Spring Data JPA呢?這是一個(gè)好問題,我賣個(gè)關(guān)子,我們先來看看Spring Data如何與Spring進(jìn)行整合。
1. Spring整合Spring Data JPA
1.1 添加依賴
org.springframework.boot spring-boot-starter-data-jpa MySQL mysql-connector-java 6.0.6
1.2 配置屬性
#通用數(shù)據(jù)源配置 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 數(shù)據(jù)源專用配置 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=5 # JPA 相關(guān)配置 #在 SrpingBoot 2.0 版本中,Hibernate 創(chuàng)建數(shù)據(jù)表的時(shí)候,默認(rèn)的數(shù)據(jù)庫存儲(chǔ)引擎選擇的是 MyISAM (之前好像是 InnoDB,這點(diǎn)比較詭異)。這個(gè)參數(shù)是在建表的時(shí)候,將默認(rèn)的存儲(chǔ)引擎切換為 InnoDB 用的。 spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect #配置在日志中打印出執(zhí)行的 SQL 語句信息。 spring.jpa.show-sql=true #配置指明在程序啟動(dòng)的時(shí)候要?jiǎng)h除并且創(chuàng)建實(shí)體類對(duì)應(yīng)的表。這個(gè)參數(shù)很危險(xiǎn),因?yàn)樗麜?huì)把對(duì)應(yīng)的表刪除掉然后重建。所以千萬不要在生成環(huán)境中使用。只有在測(cè)試環(huán)境中,一開始初始化數(shù)據(jù)庫結(jié)構(gòu)的時(shí)候才能使用一次。 spring.jpa.hibernate.ddl-auto=update
對(duì)spring.jpa.hibernate.ddl-auto屬性感興趣的同學(xué),可以去下面這篇博客看看。jpa的hibernate.ddl-auto的幾個(gè)屬性值區(qū)別。
1.3 創(chuàng)建實(shí)體類
import lombok.Data; import javax.persistence.*; /* * @Description TODO * @author Raindrop * @date 2019/8/22 9:10 */ @Data //lombok構(gòu)建Get和Set方法 @Entity //聲明該類為實(shí)體類 @Table(name = "SpringDataJpa") //該實(shí)體類對(duì)應(yīng)的表名 public class Test { @Id //該屬性為主鍵 @GeneratedValue(strategy = GenerationType.IDENTITY) //JPA通用策略生成器 @Column(name = "id") //數(shù)據(jù)表中列名 private Integer id; @Column(name = "username", columnDefinition = "varchar(50) not null") //數(shù)據(jù)表中列名以及列類型 private String username; @Column(name = "email", columnDefinition = "varchar(50) not null") //數(shù)據(jù)表中列名以及列類型 private String email; @Column(name = "sex", columnDefinition = "varchar(50) not null") //數(shù)據(jù)表中列名以及列類型 private String sex; @Column(name = "age", columnDefinition = "varchar(50) not null") //數(shù)據(jù)表中列名以及列類型 private String age; }
1.4 創(chuàng)建dao層
好了,我們的準(zhǔn)備工作都已經(jīng)做完了,接下來我們就可以快樂的進(jìn)行CRUD了。
創(chuàng)建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{ //自定義方法 根據(jù)方法名來創(chuàng)建sql語句 //形成的SQL語句:select * from spring_data_jpa where userName = ?1 RaindropUser findByUsername(String userName); //自定義方法 根據(jù)方法名來創(chuàng)建sql語句 //形成的SQL語句:select * from spring_data_jpa where sex = ?1 and email=?2 RaindropUser findBySexAndEmail(String sex, String email); //切記切記,native的使用方法 JPA使用nativeQuery=true來區(qū)分是不是原生SQL //以下方法是錯(cuò)誤的,不可以使用原生的sql,而要是用對(duì)應(yīng)的實(shí)體類以及屬性來表示列和表名 //@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 findByLtAge(Integer age); // 該示例也是錯(cuò)的 // @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 測(cè)試類
@Test public void Test(){ RaindropUser raindropUser = new RaindropUser(); // raindropUser.setEmail("123123@gmail.com"); // raindropUser.setAge(12); // raindropUser.setUsername("Raindrop"); // raindropUser.setSex("man"); // 繼承自JpaRepository類都有一些基礎(chǔ)方法,稍后講解。該方法為保存數(shù)據(jù) // raindropUserRepository.save(raindropUser); Listlist = 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方法解析
我們?cè)赗epository類中定義了findByUsername以及findBySexAndEmail方法,SpringData會(huì)根據(jù)方法名自動(dòng)生成SQL語句來執(zhí)行。
重點(diǎn)詞匯以及生成的SQL語句
Keyword | Sample | JPQL snippet |
---|---|---|
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstnameIs,findByFirstnameEquals | … where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age ? ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended %) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended %) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collectionage) | … where x.age not in ?1 |
TRUE | findByActiveTrue() | … where x.active = true |
FALSE | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |
以上就是Spring Data JPA的配置與使用方法,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。