- 项目介绍
- 准备事项
- 注意事项
- 升级操作
- 依赖冲突解决
基于若依迭代的一个后台管理系统,之前是SpringBoot 2.0 + mybaits框架,为了以后架构问题决定升级成为mybatis-plus架构
准备事项- mybatis-plus官方文档 :点这里;
- GitHub地址 :点这里;
- mybaits-plus版本选址:点这里 ;
当我们准备升级mybatis-plus时,我们需要舍弃之前的mybatis。也就是两者不可兼容。mybatis-plus完全可以替代mybatis的。
- 选择合适的jar包:目前最新的是 3.4.3.4,应为兼容性问题最后采用的是 3.2.0 版本的jar
- 在pom.xml中导入对应的jar (springboot 可以直接复制使用)
com.baomidou mybatis-plus-boot-starter 3.2.0
- 这时候我们需要删除之前使用的mybatis-spring-boot-starter
- 修改配置 SqlSessionFactory,如果之前有应用SqlSessionFactoryBean,我们需要替换成MybatisSqlSessionFactoryBean
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
{
// 搜索指定包别名
String typeAliasesPackage = env.getProperty("mybatis-plus.type-aliases-package");
//配置mapper的扫描,找到所有的mapper.xml映射文件
String mapperLocations = env.getProperty("mybatis-plus.mapper-locations");
//加载全局的配置文件
String configLocation = env.getProperty("mybatis-plus.config-location");
// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
final MybatisSqlSessionFactoryBean sessionFactory = 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: type-aliases-package: com.qzh.project.**.domain mapper-locations: classpath*:mybatis*Mapper.xml config-location: classpath:mybatis/mybatis-config.xml
取代
mybatis: # 搜索指定包别名 typeAliasesPackage: com.qzh.project.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mybatis*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml
当我们完成以上配置修改后,如果服务中没有jar冲突的话就可以正常的启动项目。。。
依赖冲突解决当mybatis存在依赖冲突的时候,反馈以下错误:
20:12:14.766 [main] ERROR o.s.b.SpringApplication - [reportFailure,826] - Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataDelRecordAspect': Unsatisfied dependency expressed through field 'delMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysDelMapper' defined in file [D:Program FilesWorkSoftwarecompany_qzhqiaozhihuiqiaozhihui-javatargetclassescomqzhprojectsystemmapperSysDelMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/qzh/framework/config/MyBatisPlusConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) at org.springframework.beans.factory.annotation.Injectionmetadata.inject(Injectionmetadata.java:116) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at com.qzh.QzhApplication.main(QzhApplication.java:17) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysDelMapper' defined in file [D:Program FilesWorkSoftwarecompany_qzhqiaozhihuiqiaozhihui-javatargetclassescomqzhprojectsystemmapperSysDelMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/qzh/framework/config/MyBatisPlusConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1526) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1406) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 19 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/qzh/framework/config/MyBatisPlusConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1511) ... 30 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ... 43 common frames omitted Caused by: java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.(MybatisSqlSessionFactoryBean.java:94) at com.qzh.framework.config.MyBatisPlusConfig.sqlSessionFactory(MyBatisPlusConfig.java:103) at com.qzh.framework.config.MyBatisPlusConfig$$EnhancerBySpringCGLIB$$6963a30e.CGLIB$sqlSessionFactory$0( ) at com.qzh.framework.config.MyBatisPlusConfig$$EnhancerBySpringCGLIB$$6963a30e$$FastClassBySpringCGLIB$$535e1cd1.invoke( ) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) at com.qzh.framework.config.MyBatisPlusConfig$$EnhancerBySpringCGLIB$$6963a30e.sqlSessionFactory( ) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ... 44 common frames omitted Caused by: java.lang.ClassNotFoundException: org.mybatis.logging.LoggerFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 56 common frames omitted
可以看到我们在对MybatisSqlSessionFactoryBean实例话的时候出现了错误,导致我们的sqlSessionFactory,加载失败,我这里碰到的问题的是mybatis依赖冲突了,因为我之前应用了分页插件pagehelper,中带了mybatis的版本,和我们mybatis-plus中的mybatis起了冲突,所以我们需要剔除pagehelper中的mybatis。
mybatis org.mybatis mybatis-spring org.mybatis
如果习惯使用eclipse的可以下载个 maver helper插件
当我们安装重启以后在pom.xml文件下面可以看到一个选择弹框(在Text边上)点击进去以后可以看到冲突的jar包
点击左框中的jar,后可以在右框中的jar包来源,右击排除就可以了,会自动早pom.xml文件中添加《exclusions》。



