使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的
这篇文章给大家介绍使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
使用Mybatis-Plus时的SqlSessionFactory问题
前些日子工作中出现一个问题,项目中使用了MybatisPlus,然后出现了一个问题,Druid的其他的配置都可以正常使用,但是配置的SqlSessionFactory这个bean不能被加载,我在这个bean中加载的mybatis-config.xml文件也不能被加载,因为代码里使用了拦截器进行数据库的自动分页,找到问题后在这里mark一下。
其实这里不能加载的原因是因为MybatisPlus中自定义了MybatisSqlSessionFactoryBean这个类,而这个类是实现了接口FactoryBean
贴一下这两个类的源码,看一眼就明白了
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package org.mybatis.spring;import java.io.IOException;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.builder.xml.XMLConfigBuilder;import org.apache.ibatis.builder.xml.XMLMapperBuilder;import org.apache.ibatis.cache.Cache;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.io.VFS;import org.apache.ibatis.logging.Log;import org.apache.ibatis.logging.LogFactory;import org.apache.ibatis.mapping.DatabaseIdProvider;import org.apache.ibatis.mapping.Environment;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.reflection.factory.ObjectFactory;import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.transaction.TransactionFactory;import org.apache.ibatis.type.TypeHandler;import org.mybatis.spring.transaction.SpringManagedTransactionFactory;import org.springframework.beans.factory.FactoryBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import org.springframework.core.NestedIOException;import org.springframework.core.io.Resource;import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;import org.springframework.util.Assert;import org.springframework.util.ObjectUtils;import org.springframework.util.StringUtils;public class SqlSessionFactoryBean implements FactoryBean, InitializingBean, ApplicationListener { private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class); private Resource configLocation; private Configuration configuration; private Resource[] mapperLocations; private DataSource dataSource; private TransactionFactory transactionFactory; private Properties configurationProperties; private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); private SqlSessionFactory sqlSessionFactory; private String environment = SqlSessionFactoryBean.class.getSimpleName(); private boolean failFast; private Interceptor[] plugins; private TypeHandler>[] typeHandlers; private String typeHandlersPackage; private Class>[] typeAliases; private String typeAliasesPackage; private Class> typeAliasesSuperType; private DatabaseIdProvider databaseIdProvider; private Class extends VFS> vfs; private Cache cache; private ObjectFactory objectFactory; private ObjectWrapperFactory objectWrapperFactory; public SqlSessionFactoryBean() { } 。。。。。。}
还有MybatisSqlSessionFactoryBean的
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package com.baomidou.mybatisplus.spring;import com.baomidou.mybatisplus.MybatisConfiguration;import com.baomidou.mybatisplus.MybatisXMLConfigBuilder;import com.baomidou.mybatisplus.entity.GlobalConfiguration;import com.baomidou.mybatisplus.enums.IEnum;import com.baomidou.mybatisplus.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.handlers.EnumTypeHandler;import com.baomidou.mybatisplus.mapper.SqlRunner;import com.baomidou.mybatisplus.toolkit.GlobalConfigUtils;import com.baomidou.mybatisplus.toolkit.PackageHelper;import java.sql.SQLException;import java.util.HashSet;import java.util.Iterator;import java.util.Properties;import java.util.Set;import javax.sql.DataSource;import org.apache.ibatis.builder.xml.XMLMapperBuilder;import org.apache.ibatis.cache.Cache;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.io.VFS;import org.apache.ibatis.logging.Log;import org.apache.ibatis.logging.LogFactory;import org.apache.ibatis.mapping.DatabaseIdProvider;import org.apache.ibatis.mapping.Environment;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.reflection.factory.ObjectFactory;import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.transaction.TransactionFactory;import org.apache.ibatis.type.EnumOrdinalTypeHandler;import org.apache.ibatis.type.TypeHandler;import org.apache.ibatis.type.TypeHandlerRegistry;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.transaction.SpringManagedTransactionFactory;import org.springframework.beans.factory.FactoryBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import org.springframework.core.NestedIOException;import org.springframework.core.io.Resource;import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;import org.springframework.util.Assert;import org.springframework.util.ObjectUtils;import org.springframework.util.StringUtils;public class MybatisSqlSessionFactoryBean implements FactoryBean, InitializingBean, ApplicationListener { private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class); private Resource configLocation; private Configuration configuration; private Resource[] mapperLocations; private DataSource dataSource; private TransactionFactory transactionFactory; private Properties configurationProperties; private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); private SqlSessionFactory sqlSessionFactory; private String environment = MybatisSqlSessionFactoryBean.class.getSimpleName(); private boolean failFast; private Interceptor[] plugins; private TypeHandler>[] typeHandlers; private String typeHandlersPackage; private Class>[] typeAliases; private String typeAliasesPackage; private String typeEnumsPackage; private Class> typeAliasesSuperType; private DatabaseIdProvider databaseIdProvider; private Class extends VFS> vfs; private Cache cache; private ObjectFactory objectFactory; private ObjectWrapperFactory objectWrapperFactory; private GlobalConfiguration globalConfig = GlobalConfigUtils.defaults(); public MybatisSqlSessionFactoryBean() { } 。。。。。。}
springboot+mybatis-plus报错Property'sqlSessionFactory'or'sqlSessionTemplate'are required
报错信息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'TBaseAuthController': Unsatisfied dependency expressed through field 'tBaseAuthService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'TBaseAuthServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TBaseAuthMapper' defined in file [D:\浏览器下载\myframe\yss-server\target\classes\com\yss\cn\modules\mapper\TBaseAuthMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
…
Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
解决方案:
添加jar包:
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
关于使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。