真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringDataJpa的四種查詢方式分別是什么

SpringDataJpa的四種查詢方式分別是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都做網(wǎng)站、網(wǎng)站設(shè)計服務(wù)團(tuán)隊是一支充滿著熱情的團(tuán)隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時竭誠為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)把每個網(wǎng)站當(dāng)做一個產(chǎn)品來開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!

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

一、調(diào)用接口的方式

1.基本介紹

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

public interface UserDao extends JpaRepository, JpaSpecificationExecutor

使用這幾種方法的前提是你定義的實體類必須標(biāo)注上相應(yīng)的注解

@Entity //標(biāo)注這是一個實體類@Table(name = "tbl_user") //建立實體類與表的映射關(guān)系public class User {  @Id //聲明此屬性為主鍵  @GeneratedValue(strategy = GenerationType.IDENTITY) //主鍵生成策略,自增  @Column(name = "user_id")//指定屬性對應(yīng)數(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

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

JpaSpecificationExecutor

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

2.使用方法

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

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

3.注意事項

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

findOne()

底層調(diào)用了find()方法,當(dāng)我們調(diào)用這個方法的時候直接為我們查出結(jié)果

getOne()

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

二、jpql查詢

1.基本介紹

jpql即 Jpa Query Language

jpql語法和sql其實大同小異,jpql是針對實體類進(jìn)行的操作,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ù)字其實就表示這個屬性對應(yīng)方法內(nèi)形參的位置,這樣我們就可以不按照屬性的順序進(jìn)行賦值了。

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

測試代碼

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

3.注意事項

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

注解的詳細(xì)信息如下:

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

三、sql查詢

1.基本介紹

使用sql語句查詢

2.使用方法

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

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

測試方法

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

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

1.基本介紹

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

2.使用方法

自定義方法

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

測試

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

3.命名規(guī)則

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

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


本文題目:SpringDataJpa的四種查詢方式分別是什么
網(wǎng)址分享:http://weahome.cn/article/pscsjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部