show-cloud(七) mybatis-plus的多帳套配置

以前的show-cloud是單帳套單,並不適合我的要求,需要對mybatis-plus進行擴展,需要將多帳套信息擴張進來。

直接上代碼

package org.go.show.cloud.users.config;

import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.StringValue;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.reflection.MetaObject;
import org.go.show.common.baseEnum.BaseEnum;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.ArrayList;

@Configuration
@MapperScan("org.go.show.*.mapper*")
public class MybatisPlusConfig {

    /**
     * mybatis-plus分頁插件<br>
     * 文檔:http://mp.baomidou.com<br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        ArrayList<ISqlParser> sqlParserArrayList =  new ArrayList<ISqlParser>();
        TenantSqlParser tenantSqlParser=new TenantSqlParser();
        tenantSqlParser.setTenantHandler(new TenantHandler() {
            @Override
            public Expression getTenantId(boolean where) {
                Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
                if(authentication!=null){
                    Object principal = authentication.getPrincipal();
                }
                return new StringValue(BaseEnum.GROUP_ADMIN_ACCOUNT.getValue());
            }

            @Override
            public String getTenantIdColumn() {
                return "ACCOUNT_ID";
            }

            /**
             * return true 則不加上帳套信息  如果false 則表示要加上帳套信息
             * @param tableName
             * @return
             */
            @Override
            public boolean doTableFilter(String tableName) {
                return false;
            }
        });

        sqlParserArrayList.add(tenantSqlParser);
        paginationInterceptor.setSqlParserList(sqlParserArrayList);

        //對於多帳套信息進行過濾排除
        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {


            @Override
            public boolean doFilter(MetaObject metaObject) {
                return false;
            }
        });
        return paginationInterceptor;
    }

    /**
     * 版本控制注入
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }



}

通過sqlParserArrayList 自動在sql語句中自動拼接accout_id咯

如果mapper裏面sql不需要追加帳套信息,則加上@SqlParser(filter = true)這個註解

   @SqlParser(filter = true)
    @Select("select count(*) from GS_ON_LINE_MEMBER ")
    Object getOnLineNumbers(LambdaQueryWrapper<OnLineMember> onLineMemberLambdaQueryWrapper);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章