国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MyBatis】攔截查詢結(jié)果同時(shí)動(dòng)態(tài)替換

這篇具有很好參考價(jià)值的文章主要介紹了【MyBatis】攔截查詢結(jié)果同時(shí)動(dòng)態(tài)替換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

說明

項(xiàng)目中需要用到響應(yīng)時(shí)替換某些字段的某些值。文章來源地址http://www.zghlxwxcb.cn/news/detail-755949.html

代碼

package xxx.xxx.xx;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * 屬性值替換
 *
 * @author behappyto.cn
 */
@Slf4j
@Intercepts({@Signature(type = Executor.class, method = "query"
        , args = {MappedStatement.class, Object.class, RowBounds.class,
        ResultHandler.class}),
        @Signature(type = Executor.class, method = "query"
                , args = {MappedStatement.class, Object.class, RowBounds.class,
                ResultHandler.class, CacheKey.class, BoundSql.class})})
public class PropertyInterceptor implements Interceptor {

    /**
     * 當(dāng)前的值可以放到配置文件、配置中心或者其他方式動(dòng)態(tài)獲取
     */
    private final static HashMap<String, String> TABLE_COLUMN = new HashMap<>();

    static {
        TABLE_COLUMN.put("實(shí)體類名", "屬性名");
    }

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Object obj = invocation.proceed();
        try {
            if (ObjectUtils.allNull(obj)) {
                return obj;
            }
            if (!(obj instanceof List)) {
                return obj;
            }
            List<Object> objectList = (List<Object>) obj;
            String newValue = "替換的值"
            if (StringUtils.isBlank(newValue)) {
                return objectList;
            }
            List<Object> respList = new ArrayList<>();
            for (Object object : objectList) {
                respList.add(this.getObject(newValue, object));
            }
            return respList;
        } catch (Exception exception) {
            log.error("ex", exception);
            return obj;
        }
    }

    /**
     * 轉(zhuǎn)換對(duì)象
     *
     * @param domain 需要替換的域名
     * @param object 數(shù)據(jù)庫(kù)的對(duì)象
     * @return 返回 轉(zhuǎn)換后的對(duì)象信息
     * @throws IllegalAccessException 異常
     */
    private Object getObject(String domain, Object object) throws IllegalAccessException {
        Class<?> aClass = object.getClass();
        String tableEntry = aClass.getSimpleName();
        String columnField = TABLE_COLUMN.get(tableEntry);
        if (StringUtils.isNotBlank(columnField)) {
            Field[] fields = ReflectUtil.getFields(aClass);
            Optional<Field> optional = Arrays.stream(fields).filter(item ->
                    item.getName().equals(columnField)).findFirst();
            if (!optional.isPresent()) {
                return object;
            }
            Field field = optional.get();
            Object obj = field.get(tableEntry);
            if (obj instanceof String) {
                field.set(field.getName(), MessageFormat.format((String) obj, domain));
            }
        }
        return object;
    }
}

到了這里,關(guān)于【MyBatis】攔截查詢結(jié)果同時(shí)動(dòng)態(tài)替換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Mybatis中表關(guān)系查詢結(jié)果集映射

    Mybatis中表關(guān)系查詢結(jié)果集映射

    resultMap 元素是 MyBatis 中最重要最強(qiáng)大的元素。它可以讓你從 90% 的 JDBC ResultSets 數(shù)據(jù)提取代碼中解放出來,并在一些情形下允許你進(jìn)行一些 JDBC 不支持的操作。實(shí)際上,在為一些比如連接的復(fù)雜語句編寫映射代碼的時(shí)候,一份 resultMap 能夠代替實(shí)現(xiàn)同等功能的數(shù)千行代碼。Re

    2024年02月16日
    瀏覽(21)
  • mybatis模糊查詢以及結(jié)果封裝詳解

    mybatis模糊查詢以及結(jié)果封裝詳解

    創(chuàng)建maven項(xiàng)目:項(xiàng)目結(jié)構(gòu)如圖所示 準(zhǔn)備數(shù)據(jù)庫(kù)表: 準(zhǔn)備pom.xml所需的依賴: 編寫核心配置文件加載所需要的資源 編寫config.xml文件 創(chuàng)建工廠連接數(shù)據(jù)處理工具SqlSessionUtil.java SqlSessionUtil.java 創(chuàng)建學(xué)生實(shí)體類對(duì)象Student.java 1、添加模糊查詢的接口方法:getStudentSname; 2、配置接口方

    2023年04月22日
    瀏覽(25)
  • Mybatis分頁查詢同時(shí)返回總數(shù)和數(shù)據(jù)

    我們?cè)谑褂肕ybatis分頁查詢數(shù)據(jù)列表時(shí),在用戶的一個(gè)請(qǐng)求中常常需要同時(shí)返回當(dāng)前頁的列表數(shù)據(jù)以及滿足條件的數(shù)據(jù)總條數(shù)用于分頁。 1)執(zhí)行兩次SQL,一次查列表,一次查總數(shù) ? ? ? 這種方法最簡(jiǎn)單,也最容易實(shí)現(xiàn)。 2)分頁插件PageHelper ? ? ? 另一種常用的方式就是使用

    2024年02月14日
    瀏覽(26)
  • MyBatis的動(dòng)態(tài)攔截sql并修改

    因工作需求,需要根據(jù)用戶的數(shù)據(jù)權(quán)限,來查詢并展示相應(yīng)的數(shù)據(jù),那么就需要?jiǎng)討B(tài)攔截sql,在根據(jù)用戶權(quán)限做相應(yīng)的處理,因此需要一個(gè)通用攔截器,并以注解實(shí)現(xiàn)。 該文只做查詢攔截,如有其他需求,可根據(jù)工作做相應(yīng)更改 。 步驟一 該注解是方法級(jí),因此需要注解在d

    2024年02月09日
    瀏覽(34)
  • mybatis查詢多個(gè)結(jié)果返回map--@MapKey使用方法

    mybatis查詢多個(gè)結(jié)果返回map--@MapKey使用方法

    目錄 ? ? ? ? 介紹 ?源碼分析: 在使用mybatis的時(shí)候遇到一種情況,查詢結(jié)果集返回多個(gè),想用map接收,以前是用List對(duì)象接收,然后java代碼中轉(zhuǎn)換成map。其實(shí)mybatis是支持返回map的。下面就介紹使用方法。 測(cè)試代碼: 下面@MapKey中的id是BusinessPricePO中的一個(gè)屬性id,否則會(huì)報(bào)錯(cuò)

    2024年02月12日
    瀏覽(23)
  • MyBatis多表查詢+動(dòng)態(tài)sql

    MyBatis多表查詢+動(dòng)態(tài)sql

    在全局配置文件中中設(shè)置MyBatis執(zhí)行日志 假設(shè)有一個(gè)用戶表和文章表,實(shí)體類中一個(gè)關(guān)聯(lián)關(guān)系。 用戶實(shí)體類 文章實(shí)體類 如果想查詢的結(jié)果包含UserInfo的信息就需要使用,?對(duì)?映射要使? association 標(biāo)簽,因?yàn)橐黄恼轮荒軐?duì)應(yīng)一個(gè)作者。 Controller控制器代碼 Service服務(wù)層代碼

    2023年04月19日
    瀏覽(28)
  • mybatis xml多表查詢,子查詢,連接查詢,動(dòng)態(tài)sql

    mybatis xml多表查詢,子查詢,連接查詢,動(dòng)態(tài)sql

    student_type 表 student 表 Student 類 一個(gè)學(xué)生只有一個(gè)年級(jí) Type 類 一個(gè)年級(jí)有多個(gè)學(xué)生,所以用 list 下列代碼中: 1 resultMap 里面property對(duì)應(yīng)實(shí)體類屬性,column對(duì)應(yīng)數(shù)據(jù)庫(kù)字段名 2 主鍵用 id 標(biāo)簽 其他用result 3 關(guān)聯(lián)查詢(子查詢和連接查詢) 連接查詢查一次 4 一個(gè)年級(jí)多個(gè)學(xué)生,所以

    2024年01月21日
    瀏覽(18)
  • MyBatis(多表查詢,動(dòng)態(tài)SQL的使用)

    MyBatis(多表查詢,動(dòng)態(tài)SQL的使用)

    目錄 多表查詢 ?查詢文章詳情 查詢一個(gè)用戶底下的所有文章 動(dòng)態(tài)SQL的使用 if 標(biāo)簽 trim 標(biāo)簽 ?where 標(biāo)簽 set 標(biāo)簽 foreach 標(biāo)簽 現(xiàn)在有倆張表,一張是 文章表 ,一張是 用戶表 .如下: 我們現(xiàn)在想查詢得到一張表,表里面的內(nèi)容和文章表大多一致,只是要 在文章表的基礎(chǔ)上添加用戶表中

    2024年02月10日
    瀏覽(23)
  • 【已解決】Mybatis 實(shí)現(xiàn) Group By 動(dòng)態(tài)分組查詢

    ??工作中遇到這樣一個(gè)需求場(chǎng)景:實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)查詢,要求可以根據(jù)用戶在前端界面篩選的字段進(jìn)行動(dòng)態(tài)地分組統(tǒng)計(jì)。也就是說, 后端在實(shí)現(xiàn)分組查詢的時(shí)候,Group By 的字段是不確定的 ,可能是一個(gè)字段、多個(gè)字段或者不進(jìn)行分組查詢,這都是由用戶在前端決定的。 ??這

    2024年02月11日
    瀏覽(23)
  • Mybatis-plus動(dòng)態(tài)條件查詢QueryWrapper的使用

    Mybatis-plus動(dòng)態(tài)條件查詢QueryWrapper的使用

    queryWrapper是mybatis plus中實(shí)現(xiàn)查詢的對(duì)象封裝操作類,可以封裝sql對(duì)象,包括where條件,order by排序,select哪些字段等等,他的層級(jí)關(guān)系如下圖: 2.1-案例一:根據(jù)name模糊查看未刪除的用戶列表信息 過濾條件: queryWrapper實(shí)現(xiàn): 2.2-案例二:查看姓李的并且郵箱不為空的用戶列表

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包