RuoYi-Vue mybatis升级为mybatisplus

1 问题

RuoYi-Vue目前的orm框架是mybatis,希望改造为mybatisplus。

2 流程

2.1 删除所有跟mybatis相关的包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

2.2 修改项目配置类(sqlsessionfactory)

要用的是MybatisSqlSessionFactoryBean而不是SqlSessionFactoryBean

MybatisPlusAutoConfiguration的源码中,我们可以得知,当项目已经有配置SqlSessionFactorymybatis-plus将不会自动帮我们注入SqlSessionFactory,而使用我们自己定义的SqlSessionFactory。而若依项目配置的SqlSessionFactory不是MybatisSqlSessionFactoryBean

方法一:

找到若依的mybatis配置类:

 @Bean
 public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
 {
    
    
     String typeAliasesPackage = env.getProperty("mybatis.type-aliases-package");
     String mapperLocations = env.getProperty("mybatis.mapper-locations");
     String configLocation = env.getProperty("mybatis.config-location");
     typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
     VFS.addImplClass(SpringBootVFS.class);

     final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
     sessionFactory.setDataSource(dataSource);
     sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
     sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
     sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
     return sessionFactory.getObject();
    }

将其中的SqlSessionFactoryBean修改为MybatisSqlSessionFactoryBean

也就是:

 @Bean
 public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
 {
    
    
     String typeAliasesPackage = env.getProperty("mybatis.type-aliases-package");
     String mapperLocations = env.getProperty("mybatis.mapper-locations");
     String configLocation = env.getProperty("mybatis.config-location");
     typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
     VFS.addImplClass(SpringBootVFS.class);

     final MybatisSqlSessionFactoryBeansessionFactory = new MybatisSqlSessionFactoryBean();
     sessionFactory.setDataSource(dataSource);
     sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
     sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
     sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
     return sessionFactory.getObject();
    }

方法二:

把上面的这段代码,全删了。这样mybatis-plus就会自动帮我们注入sqlSessionFactory

引入的base类:

BaseMapper必须是

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

而不是

import com.baomidou.mybatisplus.mapper.BaseMapper;

不过出现这个问题,通常也是引入不同版本的mybatis-plus jar才会出现。如果你是只用3+以上版本,他引入就只有

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

3 常见问题

3.1 找不到Mapper方法

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lybgeek.admin.file.mapper.FileMapper.insert
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:107)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
	at com.sun.proxy.$Proxy129.insert(Unknown Source)
	at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:59)
	at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

解决方法:

通常就是没有删掉所有的mybatis包,或者配置类没有修改。

3.2 方法不存在

Handler dispatch failed nested exception is java.lang.NoSuchMethodError

解决办法:删掉你多余的相同依赖

  1. 你的pom文件中可能存在多个一样的依赖,而且版本号还不一样去看看你的pom文件吧
  2. 总之, 遇到这个异常应该留意一下各模块之间是否有重复依赖的问题

有其他交流的想法,可以加我创建的Q群:820080257

猜你喜欢

转载自blog.csdn.net/weixin_46017976/article/details/117522155