Mybatis-plus 定义SqlSessionFactory

最近写ssm项目升级为mybatis-plus发现一个问题,就是在ssm中使用mybatis-plus, mapper和xml文件可以正常生成,但是mybatis-plus自带的增删改查方法用不了,
报错如下

在这里插入图片描述

在这里插入图片描述
查找了半天,发现是SqlSessionFactory的问题,Mybatis-plus 和Mybatis 是兼容的。

所以网上的配置 mybatis 的SqlSessionFactory 的方法基本上可行,但是对于mybatis-plus 的一些特性会丢失, 自带的增删改查方法用不了
原配置如下

package com.it.car.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.github.pagehelper.PageInterceptor;
import com.zaxxer.hikari.HikariDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import java.io.IOException;
import java.util.Properties;

/**
 * 配置类作用:
 * 1.开启service层包扫描
 * 2.service注入dao对象
 * 3.注入事务管理器对象
 */
@Configuration
@ComponentScan("com.it.car.service")
//开启spring AOP 代理 proxyTargetClass 默认false jdk 启用  true cglib
@EnableAspectJAutoProxy(proxyTargetClass = true)
//引入数据库连接池配置信息
@Import({SpringDao.class,RedisConfig.class})
public class SpringService {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(HikariDataSource hikariDataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        //配置: 核心配置文件url地址
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        //配置:sql映射文件的url地址,如果sql映射文件和接口的文件同名同目录,这行配置可以省略不写
        /*sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:com/it/dao/*.xml"));*/
        //配置分页插件
        PageInterceptor pageInterceptor = new PageInterceptor();
        //设置分页插件的属性
        Properties properties = new Properties();
        properties.setProperty("helperDialect","mysql");
        properties.setProperty("reasonable","true");
        pageInterceptor.setProperties(properties);

        sqlSessionFactoryBean.setPlugins(pageInterceptor);
        // 将资源设置到 sqlSessionFactoryBean 的 mapperLocations
        try {
            sqlSessionFactoryBean.setMapperLocations(
                    new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/**/*.xml"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


        //配置数据库连接池
        sqlSessionFactoryBean.setDataSource(hikariDataSource);
        //可选配置,设置别名
        sqlSessionFactoryBean.setTypeAliasesPackage("com.it.car.outlet.po");
        return sqlSessionFactoryBean;

    }



    /**
     * sql映射文件对应接口时扫描器,通过指定的sqlSessionFactoryBean获取SqlSession对象
     * sqlSession.getMapper(接口.class)获取代理对象
     * @return
     */
    @Bean
    public MapperScannerConfigurer configurer(){
        MapperScannerConfigurer configurer=new MapperScannerConfigurer();
        //关联SqlSessionFactoryBean对象
        configurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
        //扫描器配置接口扫描包范围
        configurer.setBasePackage("com.it.car.outlet.dao");
        return configurer;
    }



    /**
     * 事务管理器,即利用spring AOP管理事务时的增强类
     * @param dataSource
     * @return
     */
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(HikariDataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }


}



要想使用Mybatis-plus 自带增删改查方法,需要将
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
换成mybatis-plus
修改配置如下

package com.it.car.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.github.pagehelper.PageInterceptor;
import com.zaxxer.hikari.HikariDataSource;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import java.io.IOException;
import java.util.Properties;

/**
 * 配置类作用:
 * 1.开启service层包扫描
 * 2.service注入dao对象
 * 3.注入事务管理器对象
 */
@Configuration
@ComponentScan("com.it.car.service")
//开启spring AOP 代理 proxyTargetClass 默认false jdk 启用  true cglib
@EnableAspectJAutoProxy(proxyTargetClass = true)
//引入数据库连接池配置信息
@Import({SpringDao.class,RedisConfig.class})
public class SpringService {
    @Bean
    public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(HikariDataSource hikariDataSource){
        MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        //配置: 核心配置文件url地址
        mybatisSqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        //配置:sql映射文件的url地址,如果sql映射文件和接口的文件同名同目录,这行配置可以省略不写
        /*sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:com/it/dao/*.xml"));*/
        //配置分页插件
        PageInterceptor pageInterceptor = new PageInterceptor();
        //设置分页插件的属性
        Properties properties = new Properties();
        properties.setProperty("helperDialect","mysql");
        properties.setProperty("reasonable","true");
        pageInterceptor.setProperties(properties);

        mybatisSqlSessionFactoryBean.setPlugins(pageInterceptor);
        // 将资源设置到 sqlSessionFactoryBean 的 mapperLocations
        try {
            mybatisSqlSessionFactoryBean.setMapperLocations(
                    new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/**/*.xml"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


        //配置数据库连接池
        mybatisSqlSessionFactoryBean.setDataSource(hikariDataSource);
        //可选配置,设置别名
        mybatisSqlSessionFactoryBean.setTypeAliasesPackage("com.it.car.outlet.po");
        return mybatisSqlSessionFactoryBean;

    }



    /**
     * sql映射文件对应接口时扫描器,通过指定的sqlSessionFactoryBean获取SqlSession对象
     * sqlSession.getMapper(接口.class)获取代理对象
     * @return
     */
    @Bean
    public MapperScannerConfigurer configurer(){
        MapperScannerConfigurer configurer=new MapperScannerConfigurer();
        //关联SqlSessionFactoryBean对象
        configurer.setSqlSessionFactoryBeanName("mybatisSqlSessionFactoryBean");
        //扫描器配置接口扫描包范围
        configurer.setBasePackage("com.it.car.outlet.dao");
        return configurer;
    }



    /**
     * 事务管理器,即利用spring AOP管理事务时的增强类
     * @param dataSource
     * @return
     */
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(HikariDataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }


}

再次运行,成功不报错
在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值