栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis升级Mybatis-plus,解决jar冲突问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis升级Mybatis-plus,解决jar冲突问题

Mybatis升级Mybatis-plus,解决jar冲突问题
  • 项目介绍
  • 准备事项
    • 注意事项
  • 升级操作
  • 依赖冲突解决

项目介绍

基于若依迭代的一个后台管理系统,之前是SpringBoot 2.0 + mybaits框架,为了以后架构问题决定升级成为mybatis-plus架构

准备事项
  1. mybatis-plus官方文档 :点这里;
  2. GitHub地址 :点这里;
  3. mybaits-plus版本选址:点这里 ;
注意事项

当我们准备升级mybatis-plus时,我们需要舍弃之前的mybatis。也就是两者不可兼容。mybatis-plus完全可以替代mybatis的。

升级操作
  1. 选择合适的jar包:目前最新的是 3.4.3.4,应为兼容性问题最后采用的是 3.2.0 版本的jar
  2. 在pom.xml中导入对应的jar (springboot 可以直接复制使用)
	
		com.baomidou
		mybatis-plus-boot-starter
		3.2.0
	
  1. 这时候我们需要删除之前使用的mybatis-spring-boot-starter
  2. 修改配置 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();
	    }
  1. 修改配置文件信息
    具体可以参考官方提供的配置文件信息:点这里
	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》。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号