• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【Spring Data 系列學習】Spring Data JPA 基礎查詢

    標簽: java  java.spring boot  spring data jpa

    【Spring Data 系列學習】Spring Data JPA 基礎查詢

    前面的章節簡單講解了 了解 Spring Data JPA 、 Jpa 和 Hibernate ,本章節開始通過案例上手 Spring boot Jpa 。

    spring data

    Spring Data 庫的核心接口是 Repository。首先需要定義實體類的接口,接口必須繼承 repository 并且輸入實體類型和 ID 類型,如果需要用到 CRUD 方法,可以使用 CrudRepository 來替代 Repository 。除了 CrudRepository 還有 PagingAndSortingRepository JpaRepository 等。

    我們用工具 IntelliJ IDEA,打開類 Repository.class,默認快捷鍵 CTRL+H ,如圖顯示:

    image-20200228154704224

    從上圖我們可以看出繼承關系,點擊 JpaRepository 打開Navigate→File Structure,或者點擊最左邊的 Structure,可以查看此類的結構以及有哪些方法和繼承類。

    image-20200228155457866

    • CrudRepository :基本的 CRUD 方法。
    • PagingAndSortingRepository :繼承 CrudRepository,并增加分頁功能。
    • JpaRepository :繼承 PagingAndSortingRepository QueryByExampleExecutor

    快速上手

    創建一個 Spring boot 項目,創建項?在 Chapter1項? pom.xml 加入需要使?的依賴,如下所示:

    <!--   引入  jpa-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!--mysql 驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    配置文件application.properties

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=123456
    
    # 打印 sql 語句
    spring.jpa.show-sql= true
    # 自動創建表
    spring.jpa.properties.hibernate.hbm2ddl.auto=create
    # 默認創建的mysql表為  MyISAM 引擎修改為InnoDB問題
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect

    spring.jpa.properties.hibernate.hbm2ddl.auto 參數說明:

    - create:每次運行會先刪除對應的表,通過實體類重新生成表。請勿再生產環境。

    - create-drop:sessionFactory 關閉時會清空表中的數據。

    - update:運行時如果沒有表會自動創建表,只會更新表內數據不會請空數據。(推薦使用)

    - validate:運行時驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。

    實體類映射數據庫表

    user 實體類

    @Entity
    public class User implements Serializable {
    
        private static final long serialVersionUID = -390763540622907853L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String name;
    
        private Integer age;
    
        // 省略構造器 set/get        
    
    }

    @Entity 定義對象將會成為被JPA管理的實體,將映射到指定的數據庫表。

    @Id 定義屬性為數據庫的主鍵,一個實體里面必須有一個。

    @GeneratedValue(strategy = GenerationType.IDENTITY) 自增長 ID 策略

    繼承 CrudRepository

    public interface UserCrudRepository extends CrudRepository<User, Long> {
    }
    

    CrudRepository<實體類,主鍵>

    CURD 測試類

    路徑:src/test/java/com/mtcarpenter/repository/UserCrudRepositoryTest.java

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserCrudRepositoryTest {
    
        /**
         * ?志對象
         */
        private Logger logger = LoggerFactory.getLogger(UserCrudRepositoryTest.class);
    
        @Autowired
        private UserCrudRepository userCrudRepository;
    
        @Test
        public void save() {
            logger.info("新增數據 result = {}", userCrudRepository.save(new User("小米", 9)));
            logger.info("新增數據 result = {}", userCrudRepository.save(new User("張三", 16)));
            logger.info("新增數據 result = {}", userCrudRepository.save(new User("三哥", 12)));
            logger.info("新增數據 result = {}", userCrudRepository.save(new User("米二", 8)));
        }
    
        @Test
        public void edit() {
            logger.info("編輯用戶 result = {}", userCrudRepository.save(new User(3L, "三三", 16)));
        }
    
        @Test
        public void delete() {
            userCrudRepository.deleteById(3L);
        }
    
        @Test
        public void findById() {
            logger.info("通過 id 查詢 result = {}",userCrudRepository.findById(1L));
        }
    
    
        @Test
        public void findAll(){
            logger.info("查詢所有記錄   result = {}",userCrudRepository.findAll());
        }
    
    
    }
    

    輸出日志:

    Hibernate: insert into user (age, name) values (?, ?)
    2020-02-29 13:18:36.809  INFO 48452 --- [           main] c.m.c.repository.UserCrudRepositoryTest  : 新增數據 result = User{id=1, name='小米', age=9}
    Hibernate: insert into user (age, name) values (?, ?)
    2020-02-29 13:18:36.828  INFO 48452 --- [           main] c.m.c.repository.UserCrudRepositoryTest  : 新增數據 result = User{id=2, name='張三', age=16}
    Hibernate: insert into user (age, name) values (?, ?)
    2020-02-29 13:18:36.848  INFO 48452 --- [           main] c.m.c.repository.UserCrudRepositoryTest  : 新增數據 result = User{id=3, name='三哥', age=12}
    Hibernate: insert into user (age, name) values (?, ?)
    2020-02-29 13:18:36.861  INFO 48452 --- [           main] c.m.c.repository.UserCrudRepositoryTest  : 新增數據 result = User{id=4, name='米二', age=8}
    

    spring.jpa.show-sql= true 開啟之后會在控制臺輸出 SQL 語句,在日常測試環境也能提高一定的開發效率。

    示例代碼-github

    版權聲明:本文為havendream原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/havendream/article/details/104694801

    智能推薦

    spring data jpa

    Part1     概覽   1.ORM概述[了解] ORM(Object-Relational Mapping) 表示對象關系映射。在面向對象的軟件開發中,通過ORM,就可以把對象映射到關系型數據庫中。只要有一套程序能夠做到建立對象與數據庫的關聯,操作對象就可以直接操作數據庫數據,就可以說這套程序實現了ORM對象關系映射 簡單的說:ORM就是建立實體類和數據庫表之間...

    spring data jpa入門

    簡述: Spring Data是Spring的一個子項目, 用于訪問數據庫 其主要目標是使得數據庫的訪問變得方便快捷 Spring Data中已經提供了常用的一些接口和實現類, 比如分頁、排序、DAO一些常用的操作 從而我們可利用spring data快速構建項目 導入spring data的jar包: 中心倉庫去下載 根據不同DB還導一個數據庫驅動 核心接口: Reposit...

    Spring Data JPA 實戰

    課程介紹 《Spring Data JPA 實戰》內容是基于作者學習和工作中實踐的總結和升華,有一句經典的話:“現在的開發人員是站在巨人的肩上,彎道超車”。因現在框架越來越優秀,減少了很多問題和工作量,如果還沒有學習 Spring Data JPA 建議趕快了解一下。隨著 Java 技術和微服務技術逐漸的廣泛的應用,Spring Cloud、Spring Boot 逐漸統一...

    spring data jpa簡介

    spring data jpa 首先要介紹一下JPA,JPA就是Java Persistence API翻譯過來就是java持久化API,它是在sun提出的java持久化規范,這些接口都在javax.persistence包下。JPA的出現最要是為了整合ORM框架,從本質上來說,它其實算是一種規范,而它提供的基本都是接口,而非具體實現,Hibernate就是一個不錯的實現例子。它兩的關系可以類比j...

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    猜你喜歡

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    Spark Streaming處理文件(本地文件以及hdfs上面的文件)

    標題介紹文件流之前先介紹一下Dstream 下面是來自官網一段的說明,Discretized Streams或DStream是Spark Streaming提供的基本抽象。它表示連續的數據流,可以是從源接收的輸入數據流,也可以是通過轉換輸入流生成的已處理數據流。在內部,DStream由一系列連續的RDD表示,這是Spark對不可變的分布式數據集的抽象(有關更多詳細信息,請參見Spark編程指南)。...

    《痞子衡嵌入式半月刊》 第 8 期

    痞子衡嵌入式半月刊: 第 8 期 這里分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農歷年分二十四節氣,希望在每個交節之日準時發布一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 7 期》 嘮兩句 今天是小滿,小滿節氣意味著進入了大幅降水的雨季。痞子...

    精品国产乱码久久久久久蜜桃不卡