MyBatis-Plus【踩坑记录01】

时间:2024-01-28 15:29:38

1、SqlSessionFactory不要使用原生的,使用MybatisSqlSessionFactory。

@Bean("sqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Autowired @Qualifier("dataSource") DataSource dataSource) throws Exception {

        // MybatisPlus内部过滤器
        // 为自动分页插件设置DB类型
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        // MybatisConfiguration
        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
        // 添加自定义拦截器
        mybatisConfiguration.addInterceptor(mybatisPlusInterceptor);
        mybatisConfiguration.addInterceptor(new UpdateInterceptor());

        //使用MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();

        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);

        // 添加设置
        sqlSessionFactoryBean.setConfiguration(mybatisConfiguration);

        // 设置xml路径
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:zeyfra/com/modules/**/*.xml"));

        //其他配置
        //Properties properties = new Properties();

        //设置方言:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
        //properties.setProperty("helperDialect", "sqlserver");

        //默认值为false,当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。
        //properties.setProperty("offsetAsPageNum", "true");

        //默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。
        //properties.setProperty("rowBoundsWithCount", "true");

        //分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
        //properties.setProperty("reasonable", "false");

        //添加设置
        //interceptor.setProperties(properties);

        //也可直接通过以下方式直接添加拦截器或Interceptor数组
        //sqlSessionFactoryBean.setPlugins(new Interceptor[] {interceptor});

        return sqlSessionFactoryBean.getObject();

    }

注意:

1、使用MybatisSqlSessionFactory之后配置应重新在此注入相应的拦截器

2、在3.4.0过后已弃用PaginationInterceptor,应使用MybatisPlusInterceptor添加自动分页插件PaginationInnerInterceptor

3、应在自动分页插件设置DB类型,否则容易出现分页查询后total为0的问题

4、pageHelper依赖会与自动分页插件产生冲突,也会出现分页查询后total为0的问题