1. <tr id="722gv"></tr>

            EntityUtils

            2024-03-07 18:39 更新

            dorado服務端的數據處理提供了一個重要的工具類:EntityUtils。 在以下的幾種場景下我們可能會用到這個工具類。

            獲取或設置數據的狀態

            dorado支持批量數據提交功能: 我們可能在一個Grid中即做了新增,也做了修改刪除等各種操作,如果這些數據一次性的批量提交到后臺,我們希望在后臺的邏輯代碼中識別出這些記錄的修改狀態究竟是新增的還是刪除的還是修改的。這種情況下我們就可以通過EntityUtils工具類解決這個問題。

                @DataResolver
                @Transactional
                public void saveAll(Collection<Product> products) {
                    for(Product product :  products){
                        if(EntityState.DELETED.equals(EntityUtils.getState(product))){
                            System.out.println("刪除產品 : " + product.getProductName());//執行產品刪除操作
                        }
                        else if(EntityState.MODIFIED.equals(EntityUtils.getState(product))){
                            System.out.println("修改產品 : " + product.getProductName());//執行產品修改操作
                        }
                        else if(EntityState.NEW .equals(EntityUtils.getState(product))){
                            System.out.println("新增產品 : " + product.getProductName());//執行產品新增操作
                        }
                    }
                    //productDao.persistEntities(products);
                }

            這是一段典型的代碼,前端提交了一個產品集合到后臺,后臺遍歷產品集合的時候可以通過EntityUtils的getState方法獲取到對象的狀態,進而再交給業務邏輯層坐增刪改有區別的持久化處理。

            獲取原始的數據對象

            由于doardo為了維護記錄的數據狀態,以及其它數據同步方面的原因,dorado對提交到java后臺的數據進行了cglib的代理處理,為了獲取被代理的原始對象,我們可以通過EntityUtils解決這個問題,參考代碼:

            @DataResolver
            @Transactional
            public void saveAll(Collection<Product> products) throws Exception {
                for (Product product : products) {
                    Product sourceProduct = EntityUtils.toPureData(product);
                    if (EntityState.DELETED.equals(EntityUtils.getState(product))) {
                        System.out.println("刪除產品 : " + sourceProduct.getProductName());// 執行產品刪除操作
                    } else if (EntityState.MODIFIED.equals(EntityUtils.getState(product))) {
                        System.out.println("修改產品 : " + sourceProduct.getProductName());// 執行產品修改操作
                    } else if (EntityState.NEW.equals(EntityUtils.getState(product))) {
                        System.out.println("新增產品 : " + sourceProduct.getProductName());// 執行產品新增操作
                    }
                }
                productDao.persistEntities(products);
            }

            我們可以通過這行代碼獲取到原始的Product對象:

            Product sourceProduct = EntityUtils.toPureData(product);

            虛擬屬性的存取

            如果我們希望給業務數據對象添加一個POJO中不存在的新的屬性,同時又不想改變POJO的結構,那么我們就可以通過EntityUtils工具類做到:

                @DataProvider
                public Collection<MockCategory> getCategories() throws Exception {
                    Collection<MockCategory> categories = generateCategories();
                    categories = EntityUtils.toEntity(categories);
                    for (MockCategory category : categories) {
                        EntityUtils.setValue(category, "categoryName", "CategoryName "
                                + category.getId());
                    }
                    return categories;
                }

            上面的代碼就是給MockCagegory對象添加了一個categoryName屬性,并設置了一個值。 通過虛擬屬性我們可以避免修改POJO對象,或創建新的VO對象。 設置虛擬屬性之前要確保操作的是一個被代理的數據對象,如果是業務邏輯層或持久層拿到的原始業務數據對象,我們用通過EntityUtils.toEntity(object)函數實現轉換,這個函數即支持單個數據對象,也支持集合類型的數據對象。

            當我們對數據對象添加了虛擬屬性值后,我們還可以通過EntityUtils工具類獲取虛擬屬性的值。

                @DataProvider
                public Collection<MockCategory> getCategories() throws Exception {
                    Collection<MockCategory> categories = generateCategories();
                    categories = EntityUtils.toEntity(categories);
                    for (MockCategory category : categories) {
                        EntityUtils.setValue(category, "categoryName", "CategoryName "
                                + category.getId());
                    }
                    for (MockCategory category : categories) {
                        String value = (String)EntityUtils.getValue(category, "categoryName");
                    }
                    return categories;
                }

            通過EntityUtils的getValue方法可以獲取虛擬屬性的值,當然這個方法對數據對象本身的屬性值的獲取也是支持的,例如:

            Long id = (Long)EntityUtils.getValue(category, "id");

            上面的代碼我們用了強制類型轉換,事實上如果能預先確認數據類型的話,你也可以直接用別的接口函數代替:

            Long id = EntityUtils.getLong(category, "id");
            以上內容是否對您有幫助:
            在線筆記
            App下載
            App下載

            掃描二維碼

            下載編程獅App

            公眾號
            微信公眾號

            編程獅公眾號

            中文字幕人成乱码熟女|强行入侵女人a片|亚洲日本成本人观看|天天操天天操