99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

EntityUtils

2024-03-07 18:39 更新

dorado服務(wù)端的數(shù)據(jù)處理提供了一個(gè)重要的工具類:EntityUtils。 在以下的幾種場(chǎng)景下我們可能會(huì)用到這個(gè)工具類。

獲取或設(shè)置數(shù)據(jù)的狀態(tài)

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

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

這是一段典型的代碼,前端提交了一個(gè)產(chǎn)品集合到后臺(tái),后臺(tái)遍歷產(chǎn)品集合的時(shí)候可以通過(guò)EntityUtils的getState方法獲取到對(duì)象的狀態(tài),進(jìn)而再交給業(yè)務(wù)邏輯層坐增刪改有區(qū)別的持久化處理。

獲取原始的數(shù)據(jù)對(duì)象

由于doardo為了維護(hù)記錄的數(shù)據(jù)狀態(tài),以及其它數(shù)據(jù)同步方面的原因,dorado對(duì)提交到j(luò)ava后臺(tái)的數(shù)據(jù)進(jìn)行了cglib的代理處理,為了獲取被代理的原始對(duì)象,我們可以通過(guò)EntityUtils解決這個(gè)問(wèn)題,參考代碼:

@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("刪除產(chǎn)品 : " + sourceProduct.getProductName());// 執(zhí)行產(chǎn)品刪除操作
        } else if (EntityState.MODIFIED.equals(EntityUtils.getState(product))) {
            System.out.println("修改產(chǎn)品 : " + sourceProduct.getProductName());// 執(zhí)行產(chǎn)品修改操作
        } else if (EntityState.NEW.equals(EntityUtils.getState(product))) {
            System.out.println("新增產(chǎn)品 : " + sourceProduct.getProductName());// 執(zhí)行產(chǎn)品新增操作
        }
    }
    productDao.persistEntities(products);
}

我們可以通過(guò)這行代碼獲取到原始的Product對(duì)象:

Product sourceProduct = EntityUtils.toPureData(product);

虛擬屬性的存取

如果我們希望給業(yè)務(wù)數(shù)據(jù)對(duì)象添加一個(gè)POJO中不存在的新的屬性,同時(shí)又不想改變POJO的結(jié)構(gòu),那么我們就可以通過(guò)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對(duì)象添加了一個(gè)categoryName屬性,并設(shè)置了一個(gè)值。 通過(guò)虛擬屬性我們可以避免修改POJO對(duì)象,或創(chuàng)建新的VO對(duì)象。 設(shè)置虛擬屬性之前要確保操作的是一個(gè)被代理的數(shù)據(jù)對(duì)象,如果是業(yè)務(wù)邏輯層或持久層拿到的原始業(yè)務(wù)數(shù)據(jù)對(duì)象,我們用通過(guò)EntityUtils.toEntity(object)函數(shù)實(shí)現(xiàn)轉(zhuǎn)換,這個(gè)函數(shù)即支持單個(gè)數(shù)據(jù)對(duì)象,也支持集合類型的數(shù)據(jù)對(duì)象。

當(dāng)我們對(duì)數(shù)據(jù)對(duì)象添加了虛擬屬性值后,我們還可以通過(guò)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;
    }

通過(guò)EntityUtils的getValue方法可以獲取虛擬屬性的值,當(dāng)然這個(gè)方法對(duì)數(shù)據(jù)對(duì)象本身的屬性值的獲取也是支持的,例如:

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

上面的代碼我們用了強(qiáng)制類型轉(zhuǎn)換,事實(shí)上如果能預(yù)先確認(rèn)數(shù)據(jù)類型的話,你也可以直接用別的接口函數(shù)代替:

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)