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

spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程

 更新時(shí)間:2022年03月23日 11:04:04   作者:KimZing  
這篇文章主要為大家介紹了spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、SpringBoot集成Hibernate JPA的依賴

    compile(
            //hibernate
            'org.springframework.boot:spring-boot-starter-data-jpa',
            'org.hibernate:hibernate-java8',
            'mysql:mysql-connector-java',
            //springmvc
            'org.springframework.boot:spring-boot-starter-web',
            "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "com.kingboy:common:$commonVersion"
    )

二、環(huán)境準(zhǔn)備

1.配置文件

server:
  port: 8080
spring:
  application:
    name: kingboy-springboot-data
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///jpa?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    schema: classpath:shema.sql
    data: classpath:data.sql
  jpa:
    hibernate:
      ddl-auto: none

2.創(chuàng)建data.sql和schema.sql

scheme.sql:建表語句,我沒有使用hibernate的建表

CREATE TABLE IF NOT EXISTS `user` (
  `id` bigint(20) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `birth` datetime DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `realname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `username` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

data.sql:一些假數(shù)據(jù),每次重啟清空重新插入

DELETE FROM `user`;
INSERT INTO `user`
VALUES
        ('1', '56', '2016-09-12 12:12:00', 'king123', '小明', 'boy'),
        ('2', '12', '1993-08-12 07:12:00', 'king123', '小南', 'kingboy'),
        ('3', '11', '1992-05-12 23:12:00', 'king123', '小孩', 'boyking'),
        ('4', '2', '2006-12-13 20:12:00', 'king123', '金子', 'kiboy'),
        ('5', '66', '2012-09-12 05:12:00', 'king123', '哈嘍小金', 'baby'),
        ('6', '12', '2000-02-13 06:12:00', 'king123', 'Baby', 'xiaohong'),
        ('7', '24', '2017-12-12 11:12:00', 'king123', '小金', 'king');

三、實(shí)體類

@Entity
public class User {
    @Id
    private Long id;
    private String username;
    private String realname;
    private String password;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private LocalDateTime birth;
    //Setter Getter ...
}

四、編寫倉庫

1.代碼編寫

寫一個(gè)類繼承JpaRepository<T, ID>,需要寫兩個(gè)泛型,第一個(gè)代表要存儲的實(shí)體類型,第二個(gè)代表主鍵類型,例如寫一個(gè)User類的倉儲如下:

public interface UserRepository extends JpaRepository<User, Long> {
    
}

我們來看一下JpaRepository的繼承結(jié)構(gòu)(如下),其實(shí)就可以發(fā)現(xiàn)仍然是JPA的一套Reposiroty,那我們其實(shí)就可以用JPA的一套接口操作進(jìn)行數(shù)據(jù)的增刪改查,
spring會自動根據(jù)方法名為我們生成對應(yīng)的代理類去實(shí)現(xiàn)這些方法。

JpaRepository繼承體系

2.CRUD基礎(chǔ)操作

先來看看JpaRepository已經(jīng)實(shí)現(xiàn)的一些基礎(chǔ)方法,這些方法的名稱已經(jīng)具有很好的說明解釋了,那么大家自己看看,很容易就能理解

JpaRepository基礎(chǔ)操作

3.稍微復(fù)雜操作

jpa自帶的這些方法肯定是不能滿足我們的業(yè)務(wù)需求的,那么我們?nèi)绾巫远x方法呢?我們只要使用特定的單詞對方法名進(jìn)行定義,那么Spring就會對我們寫的方法名進(jìn)行解析,
生成對應(yīng)的實(shí)例進(jìn)行數(shù)據(jù)處理,有木有很簡單?那么接下來就使用Spring官方文檔中的實(shí)例進(jìn)行演示。

先來看下官方關(guān)鍵字的說明

邏輯操作在定義方法時(shí)使用的關(guān)鍵詞
ANDAnd
OROr
AFTERAfter , IsAfter
BEFOREBefore , IsBefore
CONTAININGContaining , IsContaining , Contains
BETWEENBetween , IsBetween
ENDING_WITHEndingWith , IsEndingWith , EndsWith
EXISTSExists
FALSEFalse , IsFalse
GREATER_THANGreaterThan , IsGreaterThan
GREATER_THAN_EQUALSGreaterThanEqual , IsGreaterThanEqual
INIn , IsIn
ISIs , Equals , (or no keyword)
IS_EMPTYIsEmpty , Empty
IS_NOT_EMPTYIsNotEmpty , NotEmpty
IS_NOT_NULLNotNull , IsNotNull
IS_NULLNull , IsNull
LESS_THANLessThan , IsLessThan
LESS_THAN_EQUALLessThanEqual , IsLessThanEqual
LIKELike , IsLike
NEARNear , IsNear
NOTNot , IsNot
NOT_INNotIn , IsNotIn
NOT_LIKENotLike , IsNotLike
REGEXRegex , MatchesRegex , Matches
STARTING_WITHStartingWith , IsStartingWith , StartsWith
TRUETrue , IsTrue
WITHINWithin , IsWithin

舉幾個(gè)方法的栗子:

使用示例說明
findByNameAndPrice(String name,Double price)根據(jù)用戶名和價(jià)格進(jìn)行查詢
findByNameOrPrice(String name,Double price)根據(jù)用戶名或者價(jià)格進(jìn)行查詢
findByName(String name)根據(jù)用戶名進(jìn)行查找
findByNameNot(String name)查找用戶名!=name的用戶
findByPriceBetween(Double a, Double b)查詢價(jià)格區(qū)間
findByPriceLessThan(Double price)查詢價(jià)格小于price,不包含price
findByPriceGreaterThan(Double price)查詢價(jià)格大于price,不包含price
findByPriceBefore(Double price)查詢價(jià)格小于price,包含price
findByPriceAfterDouble price查詢價(jià)格大于price,包含price
findByNameLike(String name)根據(jù)用戶名查詢??????這個(gè)我實(shí)驗(yàn)了下,是完全匹配查詢,并沒有模糊查詢
findByNameStartingWith(String name)用戶名以name開頭的用戶
findByNameEndingWith(String name)用戶名以name結(jié)尾的用戶
findByNameContaining(String name)用戶名包含name的用戶,相當(dāng)于sql中的like %name%
findByNameIn(Collectionnames)查詢用戶名在名稱列表的用戶
findByNameNotIn(Collectionnames)查詢用戶名不在名稱列表的用戶
findByAvailableTrue查詢avaliable屬性為true的用戶
findByAvailableFalse查詢avaliable屬性為false的用戶
findByAvailableTrueOrderByNameDesc()查詢avaliable屬性為true的用戶,并按用戶名排序

如果需要分頁功能的話,只需要在方法的最后一個(gè)參數(shù)加上Pageable就可以了,下面的示例中有演示

下面寫幾個(gè)示例進(jìn)行演示,只把倉儲層的列出來了,整體運(yùn)行是測試過的,沒問題,如果需要整體代碼請到本文頂部的github倉庫查看。

public interface UserRepository extends JpaRepository<User, Long> {
    /**
     * 查詢用戶名為username的用戶
     * @param username
     * @return
     */
    List<User> findByUsername(String username);
    /**
     * 查詢用戶名為username的用戶,帶分頁
     * @param username
     * @return
     */
    List<User> findByUsername(String username, Pageable pageable);
    /**
     * 查詢用戶名為username并且真實(shí)姓名為realname的用戶
     * @param username
     * @param realname
     */
    List<User> findByUsernameAndRealname(String username, String realname);
    /**
     * 查詢用戶名為username或者姓名為realname的用戶
     */
    List<User> findByUsernameOrRealname(String username, String realname);
    /**
     * 查詢用戶名不是username的所有用戶
     * @param username
     * @return
     */
    List<User> findByUsernameNot(String username);
    /**
     * 查詢年齡段為ageFrom到ageTo的用戶
     * @param ageFrom
     * @param ageTo
     * @return
     */
    List<User> findByAgeBetween(Integer ageFrom, Integer ageTo);
    /**
     * 查詢生日小于birthTo的用戶
     */
    List<User> findByBirthLessThan(LocalDateTime birthTo);
    /**
     * 查詢生日段大于birthFrom的用戶
     * @param birthFrom
     * @return
     */
    List<User> findByBirthGreaterThan(LocalDateTime birthFrom);
    /**
     * 查詢年齡小于或等于ageTo的用戶
     */
    List<User> findByAgeBefore(Integer ageTo);
    /**
     * 查詢年齡大于或等于ageFrom的用戶
     * @param ageFrom
     * @return
     */
    List<User> findByAgeAfter(Integer ageFrom);
    /**
     * 用戶名模糊查詢
     * @param username
     * @return
     */
    List<User> findByUsernameLike(String username);
    /**
     * 查詢以start開頭的用戶
     * @param start
     * @return
     */
    List<User> findByUsernameStartingWith(String start);
    /**
     * 查詢以end結(jié)尾的用戶
     * @return
     */
    List<User> findByUsernameEndingWith(String end);
    /**
     * 查詢用戶名包含word的用戶
     * @param word
     * @return
     */
    List<User> findByUsernameContaining(String word);
    /**
     * 查詢名字屬于usernames中的用戶
     * @param usernames
     * @return
     */
    List<User> findByUsernameIn(Collection<String> usernames);
    /**
     * 查詢名字不屬于usernames中的用戶
     * @param usernames
     * @return
     */
    List<User> findByUsernameNotIn(Collection<String> usernames);
    /**
     *最后來個(gè)復(fù)雜點(diǎn)的:查詢年齡小于ageTo,姓名以start開頭,id大于idTo的用戶,并且按照年齡倒序
     * @return
     */
    List<User> findByAgeBeforeAndUsernameStartingWithAndIdGreaterThanOrderByAgeDesc(Integer ageTo, String start, Long idTo);
}

4.更復(fù)雜一點(diǎn)的操作

我們可以使用@Query注解進(jìn)行查詢,這樣要求我們自己寫查詢語句,需要會hqlS查詢才可以,其實(shí)也很簡單,不會寫查就是了。

注意:hql的方式仍然可以在參數(shù)最后一個(gè)加Pageable進(jìn)行分頁,但是nativeQuery不可以。

public interface BookRepository extends ElasticsearchRepository<Book, String> {
       /**
        * 使用@Query和hql進(jìn)行查詢
        * @param name
        * @return
        */
       @Query("from User where username = :name")
       List<User> findByNameHQL(@Param(value = "name") String name, Pageable pageable);
   
       /**
        * 使用原生sql進(jìn)行查詢
        * @param name
        * @return
        */
       @Query(value = "select * from user where username = :name", nativeQuery = true)
       List<User> findByNameNative(@Param(value = "name") String name);
}

5.這種通過接口方法的方式也可以進(jìn)行聯(lián)表查詢,以后有機(jī)會再補(bǔ)充

以上就是spring jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程的詳細(xì)內(nèi)容,更多關(guān)于spring jpa集成環(huán)境實(shí)體類倉庫編寫教程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • jdbc與druid連接池的使用詳解

    jdbc與druid連接池的使用詳解

    這篇文章主要介紹了jdbc與druid連接池的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java面試題沖刺第一天--基礎(chǔ)篇1

    Java面試題沖刺第一天--基礎(chǔ)篇1

    這篇文章主要為大家分享了最有價(jià)值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot解析yml全流程詳解

    SpringBoot解析yml全流程詳解

    本文主要介紹了SpringBoot解析yml全流程詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java實(shí)現(xiàn)冒泡排序算法

    Java實(shí)現(xiàn)冒泡排序算法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)冒泡排序算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java方法的可變參數(shù)類型實(shí)例分析

    Java方法的可變參數(shù)類型實(shí)例分析

    這篇文章主要介紹了Java方法的可變參數(shù)類型,通過實(shí)例對Java中的可變參數(shù)類型進(jìn)行了較為深入的分析,需要的朋友可以參考下
    2014-09-09
  • java拓展集合工具類CollectionUtils

    java拓展集合工具類CollectionUtils

    這篇文章主要為大家詳細(xì)介紹了java拓展集合工具類CollectionUtils,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java 非常好用的反射框架Reflections介紹

    java 非常好用的反射框架Reflections介紹

    這篇文章主要介紹了java 反射框架Reflections的使用,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Java基礎(chǔ)之異常處理詳解

    Java基礎(chǔ)之異常處理詳解

    異??赡苁窃诔绦驁?zhí)行過程中產(chǎn)生的,也可能是程序中throw主動拋出的。本文主要給大家介紹了Java中異常處理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java詳細(xì)分析LCN框架分布式事務(wù)

    Java詳細(xì)分析LCN框架分布式事務(wù)

    這篇文章主要介紹了Java LCN框架分布式事務(wù),分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上
    2022-07-07
  • Java并發(fā)編程——volatile關(guān)鍵字

    Java并發(fā)編程——volatile關(guān)鍵字

    這篇文章主要介紹了Java并發(fā)編程——volatile關(guān)鍵字的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā)編程,感興趣的朋友可以了解下
    2020-10-10

最新評論