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

目录

  • springboot多模块化整合mybatis,mapper自动注入失败
    • 问题
    • 解决
  • springbootmapper注入失败的一种原因
    • 具体情况是
    • 解决办法

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

解决
【springboot多模块化整合mybatis|springboot多模块化整合mybatis,mapper自动注入失败问题及解决】手动装配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); } @Autowiredprivate Environment env; //destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.@Beanpublic 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"); //用来检测连接是否有效的sqldataSource.setTestOnBorrow(false); //申请连接时执行validationQuery检测连接是否有效dataSource.setTestWhileIdle(true); //建议配置为true,不影响性能,并且保证安全性。dataSource.setPoolPreparedStatements(false); //是否缓存preparedStatement,也就是PSCachereturn dataSource; } }

启动类配置文件:
spring:datasource:name: testurl: jdbc:mysql://localhost:3306/dbusername: rootpassword: root# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverfilters: statmaxActive: 20initialSize: 1maxWait: 60000minIdle: 1timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: select 'x'testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxOpenPreparedStatements: 20 mybatis:mapperLocations: classpath*:mapper/*.xmltypeAliasesPackage: com.ten.entity

启动类依赖
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-data-restorg.mybatis.spring.bootmybatis-spring-boot-startermysqlmysql-connector-javacom.alibabadruid

DAO类
@Repositorypublic interface UserMapper {String getTest(String test); }

DAO类依赖
org.mybatis.spring.bootmybatis-spring-boot-starter

目录结构:
springboot多模块化整合mybatis|springboot多模块化整合mybatis,mapper自动注入失败问题及解决
文章图片


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

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

解决办法
实体类型定义成Date。
LocalDateTime其实是一种时间转换工具,不要定义为实体的类型。 实体类是时间的话,类型一般是Date或者timestamp。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读