最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?data?jpa查詢一個實體類的部分屬性方式

 更新時間:2022年02月24日 08:45:34   作者:peng?chao  
這篇文章主要介紹了spring?data?jpa查詢一個實體類的部分屬性方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring data jpa查詢一個實體類的部分屬性

使用Spring Data Repository查詢時候,通常情況下返回的是一個實體所有的屬性。但是在很多情況下,我們只需要實體類的部分屬性。下面的部分講述如何實現(xiàn)查詢一個實體類的部分屬性。

首先我們定義兩個實體類

package cn.net.leadu.domain; 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
/**
 * Created by PengChao on 2016/12/1.
 */
@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    private String firstName;
    private String lastName;
    @OneToOne
    private Address address;
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public Address getAddress() {
        return address;
    }
 
    public void setAddress(Address address) {
        this.address = address;
    }
}
package cn.net.leadu.domain; 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
/**
 * Created by PengChao on 2016/12/1.
 */
@Entity
public class Address {
    @Id
    @GeneratedValue
    private Long id;
    private String street;
    private String state;
    private String country;
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getStreet() {
        return street;
    }
 
    public void setStreet(String street) {
        this.street = street;
    }
 
    public String getState() {
        return state;
    }
 
    public void setState(String state) {
        this.state = state;
    }
 
    public String getCountry() {
        return country;
    }
 
    public void setCountry(String country) {
        this.country = country;
    }
}

然后創(chuàng)建person實體類的repository

package cn.net.leadu.dao; 
import cn.net.leadu.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
 
/**
 * Created by PengChao on 2016/12/1.
 */
public interface PersonRepository extends JpaRepository<Person, Long> {
    Person findByFirstName(String firstName); // 1
}

"1"方法將會返回Person對象的所有屬性(包括address)


 

但實際情況我們不需要返回address對象,這種情況我們可以定義一個projection,如下:

package cn.net.leadu.domain;
/**
 * Created by PengChao on 2016/12/1.
 */
public interface NoAddress {
    String getFirstName(); //2
    String getLasetName(); //3
}

“2”輸出person對象的firstName屬性,“3”輸出person對象的lastName屬性

最后在Person實體類的repository中定義一個查詢方法,返回值是NoAddress,如下

package cn.net.leadu.dao;
import cn.net.leadu.domain.NoAddress;
import cn.net.leadu.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
/**
 * Created by PengChao on 2016/12/1.
 */
public interface PersonRepository extends JpaRepository<Person, Long> {
    NoAddress findByFirstName(String firstName);
}

返回結(jié)果只包含firstName和lastName兩個屬性



 

spring data jpa查詢部分字段、多余附加字段

spring data jpa查詢部分字段

第一種方法:使用 model 查詢時轉(zhuǎn)化

首先建立一個 model ,寫上自己想要查詢的字段,然后寫上構(gòu)造函數(shù),這步很重要,因為spring jpa 轉(zhuǎn)化時會調(diào)用這個構(gòu)造方法

public class MyModel implements Serializable {
? ? private String userName;
? ? private String name;
? ? private String gender;
? ? private String description;
? ? public MyModel() {};
? ? public MyModel(String userName, String name, String gender, String description) {
? ? ? ? this.userName = userName;
? ? ? ? this.name = name;
? ? ? ? this.gender = gender;
? ? ? ? this.description = description;
? ? }
}

然后在 dao 類中寫查詢方法

@Query(value = "select new pers.zhuch.model.MyModel(u.userName, ui.name, ui.gender, ui.description) from UserInfo ui, User u where u.id = ui.userId")
public List<MyModel> getAllRecord();

直接在查詢語句中 new model 框架底層會調(diào)用它,然后返回這個對象(這里我寫了完整的類路徑,不寫的時候它報錯說找不到類型什么的)

然后就可以獲得只有指定字段的 model 了。然后就把它轉(zhuǎn)成 JSON 格式就 O 了。

第二種方法:在service 里邊轉(zhuǎn)換成 JSON

原理其實和第一種方法差不多,只是處理結(jié)果的方式不太一樣,只是這種方法我們就不在 hql 中 new Model 了,直接寫查詢方法

@Query(value = "select new map(u.userName, ui.name, ui.gender, ui.description) from UserInfo ui, User u where u.id = ui.userId")
public List<Map<String, Object>> getCustomField();

直接new map(這里得是小寫,不知道大寫有木有問題,反正沒試,編譯器提示是要小寫的) 

然后返回的結(jié)果是這樣的

[
    {
        "0": "admin", 
        "1": "你猜", 
        "2": "男", 
        "3": "一段描述"
    }, {
        "0": "abc", 
        "1": "你猜人家", 
        "2": "女", 
        "3": "沒事先掛了"
    }
]

注:多表聯(lián)合查詢附加額外字段,亦可使用此方法。例如

@Query("select new map(u as user,'hello' as ext) ?from User u where u.id=?1")
? ? List<Map<String,Object>> findExtTest(Long id);
? ? @Query(value="select u.*,'hello' as ext from user u where u.id=?1",nativeQuery = true)
? ? List<Object> findExtNativeTest(Long id);
?List<Map<String,Object>> rows = userRepository.findExtTest(10001l);
? ? ? ? for(Map<String,Object> row :rows) {
? ? ? ? ? ? User user = (User) row.get("user");
? ? ? ? ? ? String ext = (String) row.get("ext");
? ? ? ? ? ? System.out.println(user);
? ? ? ? ? ? System.out.println(ext);
? ? ? ? }
? ? ? ? List<Object> objects = userRepository.findExtNativeTest(10001l);
? ? ? ? for(Object obj :objects) {
? ? ? ? ? ? Object[] row = (Object[])obj;
? ? ? ? ? ? Long id = ((BigInteger) row[0]).longValue();
? ? ? ? ? ? String nickName = (String)row[17]; //數(shù)據(jù)庫字段順序
? ? ? ? ? ? String ext = (String) row[row.length-1];
? ? ? ? ? ? System.out.println(id);
? ? ? ? ? ? System.out.println(nickName);
? ? ? ? ? ? System.out.println(ext);
? ? ? ? }

第三種方法:select語句部分字段使用默認(rèn)值

@Query(value = "select u.user_name, ui.name, ui.gender,ui.description,'' as headImg from user_info u where u.id = 1",nativeQuery=true)
public List<User> getAllRecord();

相關(guān)文章

  • 詳解Java編程中對象的序列化

    詳解Java編程中對象的序列化

    這篇文章主要介紹了Java編程中對象的序列化,包括一些反序列化的例子,需要的朋友可以參考下
    2015-11-11
  • Java代碼實現(xiàn)隨機(jī)生成漢字的方法

    Java代碼實現(xiàn)隨機(jī)生成漢字的方法

    今天小編就為大家分享一篇關(guān)于Java代碼實現(xiàn)隨機(jī)生成漢字的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    本文主要介紹了springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring AOP與代理類的執(zhí)行順序級別淺析

    Spring AOP與代理類的執(zhí)行順序級別淺析

    這篇文章主要介紹了Spring AOP與代理類的執(zhí)行順序級別,關(guān)于 Spring AOP和Aspectj的關(guān)系,兩個都實現(xiàn)了切面編程,Spring AOP更多地是為了Spring框架本身服務(wù)的,而Aspectj具有更強(qiáng)大、更完善的切面功能
    2023-03-03
  • java?stream實現(xiàn)分組BigDecimal求和以及自定義分組求和

    java?stream實現(xiàn)分組BigDecimal求和以及自定義分組求和

    這篇文章主要給大家介紹了關(guān)于java?stream實現(xiàn)分組BigDecimal求和以及自定義分組求和的相關(guān)資料,Stream是Java8的一大亮點,是對容器對象功能的增強(qiáng),它專注于對容器對象進(jìn)行各種非常便利、高效的聚合操作或者大批量數(shù)據(jù)操作,需要的朋友可以參考下
    2023-12-12
  • 一個@Component注解引發(fā)的大坑

    一個@Component注解引發(fā)的大坑

    這篇文章主要介紹了一個@Component注解引發(fā)的大坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用C3P0改造JDBC對數(shù)據(jù)庫的連接

    使用C3P0改造JDBC對數(shù)據(jù)庫的連接

    這篇文章主要為大家詳細(xì)介紹了使用C3P0改造JDBC對數(shù)據(jù)庫的連接,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • kettle中使用js調(diào)用java類的方法

    kettle中使用js調(diào)用java類的方法

    這篇文章主要介紹了kettle中使用js調(diào)用java類的方法,本文講解了注意事項和調(diào)用語法,需要的朋友可以參考下
    2015-05-05
  • Java如何有效避免SQL注入漏洞的方法總結(jié)

    Java如何有效避免SQL注入漏洞的方法總結(jié)

    SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實現(xiàn)攻擊,而是針對程序員編程時的疏忽,通過SQL語句,實現(xiàn)無帳號登錄,甚至篡改數(shù)據(jù)庫,這篇文章主要給大家介紹了關(guān)于Java如何避免SQL注入漏洞的兩種方法,需要的朋友可以參考下
    2022-01-01
  • 詳解Spring容器的使用流程

    詳解Spring容器的使用流程

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Spring容器的使用流程展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論

呈贡县| 光山县| 尉氏县| 呼和浩特市| 县级市| 远安县| 搜索| 游戏| 秭归县| 铜山县| 巴彦县| 郧西县| 成安县| 广德县| 广宗县| 仁寿县| 宝鸡市| 白玉县| 武乡县| 大港区| 安义县| 醴陵市| 天峨县| 泸西县| 尤溪县| 咸丰县| 建瓯市| 郯城县| 福州市| 高邑县| 西藏| 聂拉木县| 云浮市| 丁青县| 朝阳区| 涪陵区| 长兴县| 岳普湖县| 沈阳市| 巴彦县| 广水市|