以前的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);