解决MyBatis集成SpringMVC时配置失效问题

错误原因

  1. 第一种原因:可能是Mybatis配置文件内容写错分别检查:数据源配置、mapper映射扫描配置、SQLSessionFactory配置、SqlSession配置。
    附上完整配置项目代码:(案例以阿里druid连接池为主)
<!-- druid连接池配置 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 数据源连接属性 -->
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${initialSize}" />
        <property name="minIdle" value="${minIdle}" />
        <property name="maxActive" value="${maxActive}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${maxWait}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!-- 检测空闲是否开启 -->
        <property name="testWhileIdle" value="true" />
        <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
        <property name="testOnBorrow" value="true" />
        <property name="testOnReturn" value="false" />
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
        <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
        <property name="defaultAutoCommit" value="true" />
        <!-- 验证连接有效与否的SQL,不同的数据配置不同  mysql:select 1  ;oracle : select 1 from dual -->
        <property name="validationQuery" value="select 1 from dual" />
        <property name="filters" value="wall,stat" />
        <property name="proxyFilters">
            <list>
                <ref bean="logFilter" />
                <ref bean="stat-filter" />
            </list>
        </property>
    </bean>

    <!-- 慢SQL记录 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 慢sql时间设置,即执行时间大于50毫秒的都是慢sql -->
        <property name="slowSqlMillis" value="50"/>
        <property name="logSlowSql" value="true"/>
    </bean>
    <!-- 启用慢sql日志记录时,需要引入slf4j日志包 -->
    <bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
        <property name="dataSourceLogEnabled" value="true" />
        <property name="statementExecutableSqlLogEnable" value="true" />
    </bean>
    <!-- spring和mybatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- ref指向数据源配置id -->
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描包中的类生成别名,如:com.a.User包 别名可以是User或user -->
        <property name="typeAliasesPackage" value="com.ynu.ssmdemo" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:com/ynu/ssmdemo/mybatis/dao/**/*.xml"></property>
    </bean>
  1. 第二种原因:MyBatis配置文件没有加载到SpringApplication中
    修改方法:打开web.xml文件,添加SpringContext初始化监听器
    <!-- 配置SpringMVC容器加载时的初始化参数 -->
    <context-param>
        <!-- 加载mybatis配置文件 -->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:mybatis.xml</param-value>
    </context-param>
    <!-- 能够将ServletContext读取的内容加载到SpringMVC的application对象中 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    

以上两种方法能够解决大部分问题。

感谢各位看官,如果喜欢的话点赞给我多多支持,我会一直出Java全栈开发课程内容,蟹蟹大家~磕头

猜你喜欢

转载自blog.csdn.net/gjb760662328/article/details/129176079