日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Spring Boot整合Spring Data JPA操作数据

發布時間:2023/11/28 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot整合Spring Data JPA操作数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 Sping Data JPA 簡介

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 規范的基礎上封裝的一套 JPA 應用框架,底層使用了 Hibernate 的 JPA 技術實現,可使開發者用極簡的代碼即可實現對數據的訪問和操作。它提供了包括增刪改查等在內的常用功能,且易于擴展!學習并使用 Spring Data JPA 可以極大提高開發效率!

二、 將Spring Data JPA集成到Spring Boot

第一步:引入maven依賴包,包括Spring Data JPA和Mysql的驅動
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
第二步:修改application.yml,配置好數據庫連接和jpa的相關配置
spring:datasource:url: jdbc:mysql://192.168.1.91:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: testpassword: 4rfv$RFVdriver-class-name: com.mysql.jdbc.Driverjpa:hibernate:ddl-auto: updatedatabase: mysqlshow-sql: true

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置屬性,其主要作用是:自動根據實體類的定義創建、更新、驗證數據庫表結構。該參數的幾種配置如下:

  • create:每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。
  • create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
  • update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等應用第一次運行起來后才會。
  • validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。

三、 基礎核心用法

我們來實現一個簡單的使用JPA操作數據庫的例子。

3.1.實體Model類
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name="article")
public class Article {@Id@GeneratedValueprivate Long id;@Column(nullable = false,length = 32)private String author;@Column(nullable = false, unique = true,length = 32)private String title;@Column(length = 512)private String content;private Date createTime;
}
  • @Entity 表示這個類是一個實體類,接受JPA控制管理,對應數據庫中的一個表
  • @Table 指定這個類對應數據庫中的表名。如果這個類名和數據庫表名符合駝峰及下劃線規則,可以省略這個注解。如FlowType類名對應表名flow_type。
  • @Id 指定這個字段為表的主鍵
  • @GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,一般主鍵為自增的話,就采用GenerationType.IDENTITY的生成方式
  • @Column 注解針對一個字段,對應表中的一列。nullable = false表示數據庫字段不能為空, unique = true表示數據庫字段不能有重復值,length = 32表示數據庫字段最大程度為32.

關于更多注解的詳細用法,請參考: Hibernate Annotations 參考文檔

3.2.數據操作接口
public interface ArticleRepository extends JpaRepository<Article,Long> {
}

XxxRepository繼承 JpaRepository<T,ID>為我們提供了各種針對單表的數據操作方法:增刪改查。只要你不是完全英語小白,通過調用接口的方法名稱就能知道方法是做什么操作的。

3.3.service層接口:
public interface ArticleRestService {ArticleVO saveArticle(ArticleVO article);void deleteArticle(Long id);void updateArticle(ArticleVO article);ArticleVO getArticle(Long id);List<ArticleVO> getAll();
}
3.4.service層接口實現
@Service
public class ArticleJPARestService implements  ArticleRestService  {//將JPA倉庫對象注入@Resourceprivate ArticleRepository articleRepository;@Resourceprivate Mapper dozerMapper;public ArticleVO saveArticle( ArticleVO article) {Article articlePO = dozerMapper.map(article,Article.class);articleRepository.save(articlePO);    //保存一個對象到數據庫,insertreturn  article;}@Overridepublic void deleteArticle(Long id) {articleRepository.deleteById(id);   //根據id刪除1條數據庫記錄}@Overridepublic void updateArticle(ArticleVO article) {Article articlePO = dozerMapper.map(article,Article.class);articleRepository.save(articlePO);   //更新一個對象到數據庫,仍然使用save方法}@Overridepublic ArticleVO getArticle(Long id) {Optional<Article> article = articleRepository.findById(id);  //根據id查找一條數據return dozerMapper.map(article.get(),ArticleVO.class);}@Overridepublic List<ArticleVO> getAll() {List<Article> articleLis = articleRepository.findAll();  //查詢article表的所有數據return DozerUtils.mapList(articleLis,ArticleVO.class);}
}

注意:雖然新增和修改都是使用的save方法,但是完成的功能是不一樣的。當保存的對象有主鍵id的時候,save方法會根據id更新記錄;當保存的對象沒有主鍵id的時候,save方法會向數據庫里面insert一條記錄。
然后大家可以在控制層調用一下service層方法,用postman測試一下.

四、關鍵字查詢接口

除了上文中JpaRepository為我們提供的增刪改查的方法。我們還可以自定義方法,非常簡單。把下面的方法名放到ArticleRepository 里面,它就自動為我們實現了通過author字段查找article表的所有數據。也就是說,我們使用了find(查找)關鍵字,JPA就自動將方法名為我們解析成數據庫操作,太智能了。

    //注意這個方法的名稱,jPA會根據方法名自動生成SQL執行Article findByAuthor(String author);

其他具體的關鍵字,使用方法和生產成 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(Collection age)… where x.age not in ?1
TRUEfindByActiveTrue()… where x.active = true
FALSEfindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

可以看到我們這里沒有任何類SQL語句就完成了兩個條件查詢方法。這就是Spring-data-jpa的一大特性:通過解析方法名創建查詢。針對單表的數據查詢簡單到令人發指,怎么可以這么簡單,照這個趨勢發展,程序員早晚失業。

五、測試關鍵字查詢

@RunWith(SpringRunner.class)
@SpringBootTest
public class JPAKeyWordTest {@Resourceprivate ArticleRepository articleRepository;@Testpublic void userTest() {Article article = articleRepository.findByAuthor("54188");System.out.println(article);}}

六、其他

Spring-data-jpa的能力遠不止本文提到的這些,由于本文主要以整合介紹為主,對于Spring-data-jpa的使用只是介紹了常見的使用方式。

總結

以上是生活随笔為你收集整理的Spring Boot整合Spring Data JPA操作数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。