千家信息网

使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章给大家介绍使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Mybatis-Plus时
千家信息网最后更新 2025年01月17日使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的

这篇文章给大家介绍使用Mybatis-Plus时的SqlSessionFactory问题及处理是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

使用Mybatis-Plus时的SqlSessionFactory问题

前些日子工作中出现一个问题,项目中使用了MybatisPlus,然后出现了一个问题,Druid的其他的配置都可以正常使用,但是配置的SqlSessionFactory这个bean不能被加载,我在这个bean中加载的mybatis-config.xml文件也不能被加载,因为代码里使用了拦截器进行数据库的自动分页,找到问题后在这里mark一下。

其实这里不能加载的原因是因为MybatisPlus中自定义了MybatisSqlSessionFactoryBean这个类,而这个类是实现了接口FactoryBean, InitializingBean, ApplicationListener,而在mybatis中有一个类也实现了这些接口,SqlSessionFactoryBean,所以在mybatisplus的配置文件中配置SqlSessionFactoryBean时需要换成mybatisplus中自定义的这个类MyBatisSqlSessionFactoryBean,并在类中加载对应的mybatis-config.xml文件。

贴一下这两个类的源码,看一眼就明白了

//// 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 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 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问题及处理是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0