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

使用反射方式獲取JPA Entity的屬性和值

 更新時(shí)間:2022年02月24日 08:59:04   作者:嗡湯圓  
這篇文章主要介紹了使用反射方式獲取JPA Entity的屬性和值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

反射方式獲取JPA Entity屬性和值

在記錄日志或者調(diào)試的時(shí)候,往往需要輸出數(shù)據(jù)庫查詢或者寫入的值,或者在接口交互的時(shí)候,可能需要將實(shí)體轉(zhuǎn)成JSON串傳遞出去。

在JPA中是以Entity的示例方式傳遞的。但是如果直接使用Entity.toString()

方法的話,輸出的結(jié)果是entity@內(nèi)存地址的形式,無法得知Entity的內(nèi)部具體的屬性和值。

以下描述采用反射方式獲取Entity的字段和值的方法:

反射工具類

以將實(shí)體轉(zhuǎn)為JSON串為例: 

public class ReflectEntity{
    public static String toStr(Object o){
        try{
            StringBuilder sb = new StringBuilder();
            sb.append("{");
            Class cls = o.getClass();
            Field[] fields = cls.getDeclaredFields();
            for(Field f : fields){
                f.setAccessible(true);
                sb.append("\"").append(f.getName()).append("\":\"").append(f.get(o)).append("\",");
            }
            return String.format("%s}",sb.subString(0,sb.length()-1));
        } catch(Exception e){
            return null;
        }
    }
}

重寫toString方法

假設(shè)有個(gè)JPA Entity:

@Entity
public class E{
? ? private String colA;
? ? private String colB;
? ? //getter, setter 略
? ? //在此處使用反射方法即可
? ? @Override
? ? public String toString(){
? ? ? ? return ReflectEntity.toStr(this);
? ? }
}

通過以上改造后,記錄或者通過網(wǎng)絡(luò)接口調(diào)用傳輸Entity或者List<Entity>都能順利轉(zhuǎn)為JSON串。 

通過反射獲取Entity的數(shù)據(jù)

應(yīng)用場景:有些時(shí)候SQL比較難拼接(比如說:不確定通過哪個(gè)字段獲取數(shù)據(jù)),這個(gè)時(shí)候我們可以利用java反射來獲取數(shù)據(jù)

1.Entity實(shí)體類

@Entity
@Table(name = EntitlementDbConstants.CUSTOMER_MASTER_DATA_VIEW)
public abstract class CustomerMasterDataView
{
? ? private static final long serialVersionUID = 1963275800615627823L;?
? ? @ExtendField
? ? @Column(name = CommonHanaDbExtendsColumnConstants.S_EX_1)
? ? private String sEX1;
?
? ? @ExtendField
? ? @Column(name = CommonHanaDbExtendsColumnConstants.S_EX_2)
? ? private String sEX2;
?
? ? //省略get,set方法
}

2.通過java反射獲取Entity數(shù)據(jù)

private List<Map<String, Object>> getExtensionAttributeValue(List<CustomerMasterDataView> customerMasterDataViews, String field, String type)
? ? {
? ? ? ? List<Object> noRepeakValue = new ArrayList<>();
? ? ? ? List<Map<String, Object>> valueList =new ArrayList<>();
? ? ? ? Map<String, Object> map = null;
? ? ? ? Object obj = null;
? ? ? ? String methodName = "get" + StringUtils.uncapitalize(StringUtils.replaceEach(field, new String[] ? ? //通過get方法獲取數(shù)據(jù)
? ? ? ? { "_" }, new String[]
? ? ? ? { "" }));
? ? ? ? for(CustomerMasterDataView customerMasterDataView:customerMasterDataViews)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Method method = customerMasterDataView.getClass().getMethod(methodName);
? ? ? ? ? ? ? ? obj = method.invoke(customerMasterDataView);// obj就是我們獲取某個(gè)字段的值
? ? ? ? ? ? }
? ? ? ? ? ? catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (logger.isDebugEnabled())
? ? ? ? ? ? ? ? ? ? logger.debug("Could not reflect the method {}", methodName, e);
? ? ? ? ? ? }
? ? ? ? ? ? map = formatAttributeValue(obj, type, noRepeakValue); ? ?// 格式化數(shù)據(jù),自定義的方法
? ? ? ? ? ? if(null != map)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? valueList.add(map);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return valueList;
? ? }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java環(huán)境變量為什么要配置path和classpath詳細(xì)解答

    java環(huán)境變量為什么要配置path和classpath詳細(xì)解答

    為何配置path?為何配置classpath?當(dāng)時(shí)初學(xué)java時(shí)只是關(guān)心如何做而不去關(guān)心這些問題,接下來介紹一下,感興趣的朋友可以參考下哦
    2013-01-01
  • 2021最新Java?JDK1.8的安裝超詳細(xì)教程

    2021最新Java?JDK1.8的安裝超詳細(xì)教程

    jdk1.8又稱jdk8.0,是目前相對(duì)比較穩(wěn)定的版本,不建議下載最新的jdk版本,因?yàn)樽钚掳娴膉dk不穩(wěn)定,在Java的學(xué)習(xí)中可能會(huì)出現(xiàn)各種各樣的問題,今天通過本文給大家介紹下Java?JDK1.8安裝教程,感興趣的朋友一起看看吧
    2022-04-04
  • Java圖形界面之JFrame,JLabel,JButton詳解

    Java圖形界面之JFrame,JLabel,JButton詳解

    這篇文章主要介紹了Java圖形界面之JFrame、JLabel、JButton詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java使用正則表達(dá)式判斷獨(dú)立字符的存在(代碼示例)

    Java使用正則表達(dá)式判斷獨(dú)立字符的存在(代碼示例)

    通過使用正則表達(dá)式,我們可以更加靈活地判斷字符串中是否包含特定的字符,并且可以控制匹配的條件,如獨(dú)立的字符,這為我們處理字符串提供了更多的選擇和功能,這篇文章主要介紹了Java使用正則表達(dá)式判斷獨(dú)立字符的存在,需要的朋友可以參考下
    2023-10-10
  • java類型生命周期的詳細(xì)解析

    java類型生命周期的詳細(xì)解析

    以下是對(duì)java中的類型生命周期進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • mybatis插件pageHelper實(shí)現(xiàn)分頁效果

    mybatis插件pageHelper實(shí)現(xiàn)分頁效果

    這篇文章主要為大家詳細(xì)介紹了mybatis插件pageHelper實(shí)現(xiàn)分頁效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 淺談關(guān)于Mybatis的mapper-locations配置問題

    淺談關(guān)于Mybatis的mapper-locations配置問題

    MyBatis 是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義 SQL、存儲(chǔ)過程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作,需要的朋友可以參考下
    2023-05-05
  • 獲取Spring當(dāng)前配置的兩種方式

    獲取Spring當(dāng)前配置的兩種方式

    這篇文章主要給大家介紹了獲取Spring當(dāng)前配置的,兩種方式文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • java使用CountDownLatch等待多線程全部執(zhí)行完成

    java使用CountDownLatch等待多線程全部執(zhí)行完成

    這篇文章主要為大家詳細(xì)介紹了使用CountDownLatch等待多線程全部執(zhí)行完成,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Spring5新功能日志框架Log4j2整合示例

    Spring5新功能日志框架Log4j2整合示例

    這篇文章主要為大家介紹了Spring5新功能之日志框架Log4j2的整合示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

二连浩特市| 离岛区| 咸宁市| 肥西县| 伽师县| 太仓市| 新巴尔虎右旗| 安康市| 扬州市| 乐业县| 临澧县| 兴山县| 新绛县| 灌南县| 鲜城| 潼关县| 丹巴县| 加查县| 威海市| 海安县| 钦州市| 酉阳| 蓬莱市| 关岭| 进贤县| 六枝特区| 沅江市| 武定县| 黄浦区| 登封市| 开平市| 古蔺县| 蒙自县| 山阳县| 庄浪县| 通河县| 万荣县| 延庆县| 南郑县| 万荣县| 阿克|