亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Data Jpa的四種查詢方式詳解

 更新時間:2019年12月04日 09:12:57   作者:SongAlone  
這篇文章主要介紹了Spring Data Jpa的四種查詢方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了Spring Data Jpa的四種查詢方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、調用接口的方式

1.基本介紹

通過調用接口里的方法查詢,需要我們自定義的接口繼承Spring Data Jpa規(guī)定的接口

public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User>

使用這幾種方法的前提是你定義的實體類必須標注上相應的注解

@Entity //標注這是一個實體類
@Table(name = "tbl_user") //建立實體類與表的映射關系
public class User {

  @Id //聲明此屬性為主鍵
  @GeneratedValue(strategy = GenerationType.IDENTITY) //主鍵生成策略,自增
  @Column(name = "user_id")//指定屬性對應數(shù)據(jù)庫表的列名
  private Integer userId;

  @Column(name = "user_name")
  private String userName;

  @Column(name = "user_address")
  private String userAddress;

  @Column(name = "user_salary")
  private Double userSalary;
  
  //...getter setter toString方法
}

JpaRepository<T,ID>

第一個接口里面定義了一些簡單的CRUD方法,泛型T是你定義的實體類的類型,泛型ID是你的實體類里主鍵的類型

JpaSpecificationExecutor

這個接口可以幫助我們完成一些復雜查詢,泛型T是你定義的實體類的類型

2.使用方法

只需要編寫一個自己的接口繼承上述兩個接口并填好泛型即可調用

//測試類,調用接口的findAll方法
@Test
public void testFindAll(){
  List<User> users = userDao.findAll();
  for (User user : users) {
    System.out.println(user);
  }
}

3.注意事項

JpaRepository接口里有findOne()和getOne()方法,從字面意思上來看,兩種方法都是查詢一個,的確如此,但它們兩個本質上卻有一定的差別

findOne()

底層調用了find()方法,當我們調用這個方法的時候直接為我們查出結果

getOne()

底層調用了getReference()方法,是一種懶加載的模式,使用動態(tài)代理的方式為我們創(chuàng)建一個動態(tài)代理對象,當我們調用查詢結果時才會發(fā)送sql語句,查詢出我們需要的結果

二、jpql查詢

1.基本介紹

jpql即 Jpa Query Language

jpql語法和sql其實大同小異,jpql是針對實體類進行的操作,sql是直接對數(shù)據(jù)庫表的操作,所以jpql里只是將sql里數(shù)據(jù)庫表名、列名等信息替換為實體類屬性而已

例如

sql語句的查詢:select * from tbl_user where user_name = ?

jpql語句的查詢:from User where userName = ?

2.使用方法

自定義的方法,這里使用@Query注解,value是jpql語句,你可能注意到了,每個問號后面都帶了一個數(shù)字,這個數(shù)字其實就表示這個屬性對應方法內形參的位置,這樣我們就可以不按照屬性的順序進行賦值了。

/**
 * 根據(jù)用戶id和name查詢
 * @return 用戶對象
 */
@Query(value = "from User where userId = ?2 and userName = ?1")
User findUserByIdAndName(String name, int id);

測試代碼

@Test
public void testJpql1(){
  User user = userDao.findUserByIdAndName("張三", 1);
  System.out.println(user);
}

3.注意事項

想要使用jpql的前提是你已經(jīng)使用注解配置好了實體類以及參數(shù)


注解的詳細信息如下:

/**
 * @Entity
 *  作用:指定當前類是實體類。
 * @Table
 *  作用:指定實體類和表之間的對應關系。
 *  屬性:
 *  name:指定數(shù)據(jù)庫表的名稱
 * @Id
 *  作用:指定當前字段是主鍵。
 * @GeneratedValue
 *  作用:指定主鍵的生成方式。。
 *  屬性:
 *  strategy :指定主鍵生成策略。
 *   GenerationType.IDENTITY:自增,底層數(shù)據(jù)庫必須支持自增(mysql)
 *   GenerationType.SEQUENCE:序列,底層數(shù)據(jù)庫必須支持序列(oracle)
 *   GenerationType.TABLE:jpa提供的一種策略,通過生成一張表的方式完成主鍵自增,這張表存儲了下一次添加的主鍵的值
 *   GenerationType.AUTO:由程序自動選擇一種策略
 *
 * @Column
 *  作用:指定實體類屬性和數(shù)據(jù)庫表之間的對應關系
 *  屬性:
 *   name:指定數(shù)據(jù)庫表的列名稱。
 *   unique:是否唯一
 *   nullable:是否可以為空
 *   inserttable:是否可以插入
 *   updateable:是否可以更新
 *   columnDefinition: 定義建表時創(chuàng)建此列的DDL
 *   secondaryTable: 從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字搭建開發(fā)環(huán)境[重點]
 */

三、sql查詢

1.基本介紹

使用sql語句查詢

2.使用方法

自定義的方法,與jpql不同的是,這種方法需要加上nativeQuery=true來聲明這是一個本地查詢(sql查詢)

/**
 * 使用sql進行條件查詢
 */
@Query(value = "select * from tbl_user where user_name like ?",nativeQuery = true)
List<User> sqlFindByName(String name);

測試方法

@Test
public void testSql2(){
  List<User> users = userDao.sqlFindByName("%張%");
  for (User user : users) {
    System.out.println(user);
  }
}

四、方法命名規(guī)則查詢

1.基本介紹

顧名思義,這種方法就是使用Spring Data JPA規(guī)定的方法名稱進行查詢,這種方式不需要我們寫jpql或者sql,Spring Data JPA會解析方法名幫我們自動創(chuàng)建查詢

2.使用方法

自定義方法

/**
 * 根據(jù)用戶名模糊查詢和id匹配查詢
 * @param name
 * @param id
 * @return
 */
List<User> findUserByUserNameLikeAndUserId(String name, int id);

測試

@Test
public void TestName1(){
  List<User> users = userDao.findUserByUserNameLikeAndUserAddress("%張%", "北京");
  for (User user : users) {
    System.out.println(user);
  }
}

3.命名規(guī)則

按照Spring Data JPA 定義的規(guī)則,查詢方法以findBy開頭,刪除方法以deleteBy...... 涉及條件查詢時,條件的屬性用條件關鍵字連接,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多余的前綴截取掉,然后對剩下部分進行解析。

如果你使用的編譯器是idea,當你編寫的時候idea也會給出提示。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java程序中實現(xiàn)調用Python腳本的方法詳解

    Java程序中實現(xiàn)調用Python腳本的方法詳解

    這篇文章主要介紹了Java程序中實現(xiàn)調用Python腳本的方法,結合實例形式分析了eclipse環(huán)境中使用Java調用Python腳本的相關操作技巧與注意事項,需要的朋友可以參考下
    2018-03-03
  • Java中綴表達式轉后綴表達式實現(xiàn)方法詳解

    Java中綴表達式轉后綴表達式實現(xiàn)方法詳解

    這篇文章主要介紹了Java中綴表達式轉后綴表達式實現(xiàn)方法,結合實例形式分析了Java中綴表達式轉換成后綴表達式的相關算法原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Java項目中classpath類路徑是什么

    Java項目中classpath類路徑是什么

    classpath指的是類路徑,也就是編譯之后的target文件夾下的WEB-INF/class文件夾,下面這篇文章主要給大家介紹了關于Java項目中classpath類路徑是什么的相關資料,需要的朋友可以參考下
    2023-02-02
  • maven插件assembly使用及springboot啟動腳本start.sh和停止腳本 stop.sh

    maven插件assembly使用及springboot啟動腳本start.sh和停止腳本 stop.sh

    這篇文章主要介紹了maven插件assembly使用及springboot啟動腳本start.sh和停止腳本 stop.sh的相關資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 詳細解讀Hibernate的緩存機制

    詳細解讀Hibernate的緩存機制

    這篇文章主要介紹了詳細解讀Hibernate的緩存機制,具有一定參考價值,這里分享給大家,供大家學習參閱。
    2017-10-10
  • Spring中@Conditional注解的詳細講解及示例

    Spring中@Conditional注解的詳細講解及示例

    這篇文章主要介紹了Spring中@Conditional注解的詳細講解及示例,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件給容器注冊bean,需要的朋友可以參考下
    2023-11-11
  • Java IO流深入理解

    Java IO流深入理解

    這篇文章主要介紹了java IO流的深入理解,下面和小編來一起學習一下吧,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容
    2021-07-07
  • java模板引擎Thymeleaf和前端vue的區(qū)別及說明

    java模板引擎Thymeleaf和前端vue的區(qū)別及說明

    這篇文章主要介紹了java模板引擎Thymeleaf和前端vue的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java 圖文并茂講解主方法中的String[] args參數(shù)作用

    Java 圖文并茂講解主方法中的String[] args參數(shù)作用

    很多老鐵不清楚JAVA主方法中main()里面的的參數(shù)是什么意思,以及有什么作用,接下來給大家用最通俗易懂的話來講解,還不清楚的朋友來看看吧
    2022-04-04
  • JAVA使用動態(tài)代理對象進行敏感字過濾代碼實例

    JAVA使用動態(tài)代理對象進行敏感字過濾代碼實例

    這篇文章主要介紹了JAVA使用動態(tài)代理對象進行敏感字過濾代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論