首页 > 其他分享 >springboot配置多个数据源,导致分页插件失效,返回的total为0

springboot配置多个数据源,导致分页插件失效,返回的total为0

时间:2024-03-13 16:47:49浏览次数:30  
标签:插件 metaObject springboot 数据源 new springframework import org com

直接在sqlSessionFactoryBean中指定分页插件

package com.gs.asset.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.gs.asset.common.utils.ThreadLocalContext;
import com.gs.asset.pojo.UserInfoSso;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import java.io.IOException;
import java.util.Date;

/**
 * DatasourceConfig 项目的数据源配置
 *
 * @author hyong
 * @since 2024/2/7
 */
@Configuration
@MapperScan(basePackages = "com.gs.asset.mapper")
public class DatasourceConfig {
    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DruidDataSource dataSource() {
        return new DruidDataSource();
    }

    @Bean(name = "sqlSessionFactory")
    @Primary
    public MybatisSqlSessionFactoryBean createSqlSessionFactoryBean(@Qualifier("dataSource") DruidDataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        setSqlSessionFactory(sqlSessionFactoryBean);
        //分页插件
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
        paginationInterceptor.setDbType(DbType.POSTGRE_SQL); // 设置数据库类型,根据实际情况修改
        interceptor.addInnerInterceptor(paginationInterceptor);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.addInterceptor(interceptor);
        sqlSessionFactoryBean.setConfiguration(configuration);

        //全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        //配置填充器
        globalConfig.setMetaObjectHandler(new MetaObjectHandler() {
            @Override
            public void insertFill(MetaObject metaObject) {
                Date now = new Date();
                UserInfoSso ssoInfo = ThreadLocalContext.getSsoInfo();
                String currentUser = ssoInfo.getAccountGuid();
                if (metaObject.getValue("createTime") == null) {
                    setFieldValByName("createTime", now, metaObject);
                    setFieldValByName("updateTime", now, metaObject);
                }
                setFieldValByName("creator", currentUser, metaObject);
                setFieldValByName("updater", currentUser, metaObject);
            }

            @Override
            public void updateFill(MetaObject metaObject) {
                UserInfoSso ssoInfo = ThreadLocalContext.getSsoInfo();
                String currentUser = ssoInfo.getAccountGuid();
                Date currentDate = new Date();
                setFieldValByName("updateTime", currentDate, metaObject);
                setFieldValByName("updater", currentUser, metaObject);
            }
        });
        sqlSessionFactoryBean.setGlobalConfig(globalConfig);

        return sqlSessionFactoryBean;
    }

    @Bean
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean
    @Primary
    public PlatformTransactionManager annotationDrivenTransactionManager(@Qualifier("dataSource") DruidDataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    private void setSqlSessionFactory(MybatisSqlSessionFactoryBean bean) throws IOException {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        bean.setMapperLocations(resolver.getResources("classpath*:/mapper/*.xml"));
        bean.setVfs(SpringBootVFS.class);
        bean.setTypeAliasesPackage("com.gs.asset.entity");
    }
}

 

标签:插件,metaObject,springboot,数据源,new,springframework,import,org,com
From: https://www.cnblogs.com/jiehanshi/p/18070952

相关文章

  • springboot/java/php/node/python小区物业管理小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加速,住宅小区作为城市生活的基本单元,其管理效率和服务质量直接影响着居民的生活体验。传统的物业管理方式往往依赖于人工操作,不仅耗时......
  • springboot--登录
     登录1.根据用户名查询用户2.判断用户是否存在3.判断密码是否正确。(1)password是密文Md5Util.getMD5String(password).equals(loginUser.getPassword())(2)把token存储到redis中 controller:UserController@RestController@RequestMapping("/user")@Validatedpubl......
  • springboot/java/php/node/python企业微培训小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着科技的迅猛发展,移动互联网已成为企业培训的新阵地。传统的面对面培训模式因其时间、地点的限制性逐渐显得不够灵活,而小程序作为一种轻量级的应用,能够......
  • springboot的代理模式示例----面向切面编程
    1.定义切面类 2.编写切面类importcom.alibaba.fastjson.JSON;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.xlkh.bigscreen.common.utils.RedisDeviceUtil;importcom.xlkh.bigscreen.service.bigscreen.BigscreenRedisService;importcom.xlkh.bigs......
  • SpringBoot Controller接收参数的常用方式总结
    原生的HttpServletRequest可和其他注解配合使用,是内置对象,是整个请求可获取到所有的数据请求路径参数@PathVariable请求路径参数例如url/{id},则获取id参数。@PathVariabel(name="xx")@RequestParam例如url?name=xxx。@RequestParam(name="xx")Body参数@Req......
  • 基于springboot的车辆充电桩管理系统(系统+数据库+文档)
    **......
  • 基于SpringBoot的CSGO赛事管理系统(程序+数据库+文档)
    **......
  • springboot基于JavaWeb的兽医站管理系统的设计与实现
    摘要随着世界经济信息化、全球化的到来和互联网的飞速发展,推动了各行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、动态的、交互友好的、高效的兽医站管理系统。当前的信息管理存在工作效率低,工作繁杂等问题,基于信息化的兽医站管理目......
  • springboot基于Java的公共交通查询系统的设计与实现
    摘要近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。公共交通查询系统相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。2019年疫情的爆发,更是短时间内迅速扩大了线上管理系统的规模。尽管服务行业已经......
  • springboot基于Java的远程就医系统
    摘要随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有效地促进了远程就医的发展。然而,由于用户量和需求量的增加,信息过载等......