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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章