springboot多模块化整合mybatis,mapper自动注入失败问题及解决

 更新时间:2022年01月14日 10:03:46   作者:Kevinten10  
这篇文章主要介绍了springboot多模块化整合mybatis,mapper自动注入失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot多模块化整合mybatis,mapper自动注入失败

问题

启动类添加@MapperScan或@ComponentScan,mapper类添加@Mapper或@Repository

==> Consider defining a bean of type 'com.ten.mapper.UserMapper' in your configuration.

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required in spring mock mvc test for spring boot with mybatis

解决

手动装配dataSource

启动类:

package com.ten; 
import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component; 
import javax.sql.DataSource;
 
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.ten.mapper")
class LcWebApplication {
    public static void main(String[] args) {
        SpringApplication.run(LcWebApplication.class, args);
    }
 
    @Autowired
    private Environment env;
 
    //destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
        dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        dataSource.setInitialSize(2);//初始化时建立物理连接的个数
        dataSource.setMaxActive(20);//最大连接池数量
        dataSource.setMinIdle(0);//最小连接池数量
        dataSource.setMaxWait(60000);//获取连接时最大等待时间,单位毫秒。
        dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
        dataSource.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
        dataSource.setTestWhileIdle(true);//建议配置为true,不影响性能,并且保证安全性。
        dataSource.setPoolPreparedStatements(false);//是否缓存preparedStatement,也就是PSCache
        return dataSource;
    } 
}

启动类配置文件:

spring:
    datasource:
        name: test
        url: jdbc:mysql://localhost:3306/db
        username: root
        password: root
        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20 
 
mybatis:
  mapperLocations: classpath*:mapper/*.xml
  typeAliasesPackage: com.ten.entity

启动类依赖

 <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--rest-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>

DAO类

@Repository
public interface UserMapper {
    String getTest(String test);
}

DAO类依赖

<!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

目录结构:

springboot mapper注入失败的一种原因

今天启动项目报错----mapper注入失败。细细查找一番发现是时间类型的问题。

具体情况是

数据库有个字段的类型是datetime,但是实体类里的类型我写成了LocalDateTime,结果当然是jdbctype对不上,导致mapper注入不进去。

解决办法

实体类型定义成Date。

LocalDateTime其实是一种时间转换工具,不要定义为实体的类型。 实体类是时间的话,类型一般是Date或者timestamp。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中关于字典树的算法实现

    Java中关于字典树的算法实现

    字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种。用于统计,排序和保存大量的字符串,本文针对字典树给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • 详解Spring Boot配置文件application.properties

    详解Spring Boot配置文件application.properties

    在本文中我们给大家整理了关于Spring Boot 的配置文件 application.properties的相关知识点内容,需要的朋友们参考学习下。
    2019-06-06
  • Java注解详解之@Override注解

    Java注解详解之@Override注解

    这篇文章主要给大家介绍了关于Java注解之@Override注解的相关资料,@Override是Java中的一个注解,表示一个方法是重写(Override)了父类中的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java编程—在测试中考虑多态

    Java编程—在测试中考虑多态

    这篇文章主要介绍了Java编程—在测试中考虑多态,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java编译错误信息提示java.lang.ExceptionInInitializer解决

    Java编译错误信息提示java.lang.ExceptionInInitializer解决

    这篇文章主要介绍了Java编译错误信息提示java.lang.ExceptionInInitializer的分析讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java中常见对象映射工具的使用详解

    Java中常见对象映射工具的使用详解

    对象映射是 Java 开发中的重要环节,尤其在处理数据转换时,就需要将一种结构的数据转换为另一种结构的数据(例如 DTO 和 Entity 之间),在这篇博客中,我们将认识并解析几种常用的对象映射工具,并提供详细样例,需要的朋友可以参考下
    2025-03-03
  • Java中常用的类型转换(推荐)

    Java中常用的类型转换(推荐)

    这篇文章主要介绍了Java中常用的类型转换(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • spring基于注解配置实现事务控制操作

    spring基于注解配置实现事务控制操作

    这篇文章主要介绍了spring基于注解配置实现事务控制操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java设计模式的策略模式简析

    Java设计模式的策略模式简析

    这篇文章主要介绍了Java设计模式的策略模式简析,策略模式中定义了一系列的算法族,算法族指的是类似于一系列的行为、策略,策略模式将一系列的行为封装成类,既可以说是将每一种相类似的行为都封装成一个类,也有可能存在特殊的不进行封装的行为,需要的朋友可以参考下
    2023-12-12
  • Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

    Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

    这篇文章主要介绍了Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名),文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09

最新评论