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.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-data-restorg.mybatis.spring.boot mybatis-spring-boot-startermysql mysql-connector-javacom.alibaba druid
DAO类
@Repositorypublic interface UserMapper {String getTest(String test); }
DAO类依赖
org.mybatis.spring.boot mybatis-spring-boot-starter
目录结构:
文章图片
springboot mapper注入失败的一种原因 今天启动项目报错----mapper注入失败。细细查找一番发现是时间类型的问题。
具体情况是
数据库有个字段的类型是datetime,但是实体类里的类型我写成了LocalDateTime,结果当然是jdbctype对不上,导致mapper注入不进去。
解决办法
实体类型定义成Date。
LocalDateTime其实是一种时间转换工具,不要定义为实体的类型。 实体类是时间的话,类型一般是Date或者timestamp。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 单片机|单片机学多久能工作,单片机学好了能应聘什么工作()
- C语言系列|C语言如何把多位数的每一位提取出来,(例如(四位数2345,把个、十、百、千位提取出来)超级详解)
- Java|Java SpringBoot自定义starter详解
- 保姆级SpringBoot+Vue图片上传到阿里云OSS教程
- Java多线程之悲观锁与乐观锁
- springboot中.yml文件参数的读取方式
- springboot整合shiro实现登录验证授权的过程解析
- C#单例模式与多线程用法介绍
- ModStartCMS|ModStartCMS Laravel9 模块化建站系统 v3.5.0 多图字段支持,系统优化升级
- CLOCs(3D目标检测多模态融合之late-fusion)