SpringBoot集成MybatisPlus报错的解决方案

yizhihongxing

接下来我将为您提供关于“SpringBoot集成MybatisPlus报错的解决方案”的完整攻略。

问题描述

在SpringBoot项目中集成MybatisPlus时,可能会遇到以下报错信息:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxxMapper' defined in file ... xxxMapper.java: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

该错误提示“Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required”表明,在配置Mapper时,没有为Mapper添加合适的SessionFactory或SessionTemplate属性。

解决方案

要解决该问题,需要对MybatisPlus和SpringBoot进行相应的配置。

步骤一:添加MybatisPlus的依赖

在项目的pom.xml文件中,添加MybatisPlus的依赖:

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.3.1</version>
</dependency>

步骤二:添加MybatisPlus的配置

在SpringBoot项目的application.yml或者application.properties中,添加MybatisPlus的配置,如下所示:

mybatis:
 mapper-locations: classpath*:mapper/*.xml
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

上述配置中,mapper-locations属性表示Mapper文件所在的位置,一般为classpath:mapper/.xml;configuration属性用于设置Mybatis的基本属性,如日志输出等。

步骤三:添加DataSource和SessionFactory配置

在SpringBoot项目的application.yml或者application.properties中,添加DataSource和SessionFactory配置,示例如下:

spring:
 datasource:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:mysql://${mysql.ip}:${mysql.port}/${mysql.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
   username: ${mysql.username}
   password: ${mysql.password}
   hikari:
     minimum-idle: 5
     maximum-pool-size: 100
     connection-test-query: SELECT 1
 mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
   mapper-locations: classpath*:mapper/**/*.xml

上述配置中,dataSource属性包含了关于数据库连接的一些基本信息,如驱动类、URL、用户名和密码等;SessionFactory属性则由MybatisPlus自动配置。

步骤四:添加Mapper和扫描Mapper配置

在SpringBoot项目的Mapper接口中,添加@Mapper注解;同时,在SpringBoot项目的启动类上,添加@MapperScan注解,如下所示:

@Mapper
public interface UserMapper extends BaseMapper<User> {
}
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

}

示例一

下面给出一个完整的示例。

User实体类

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
  private Long id;
  private String name;
}

UserMapper接口

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

UserService接口

public interface UserService {
  List<User> findAll();
}

UserServiceImpl实现类

@Service
public class UserServiceImpl implements UserService {

  @Autowired
  private UserMapper mapper;

  @Override
  public List<User> findAll() {
    return mapper.selectList(null);
  }
}

UserController接口

@RestController
@RequestMapping("/users")
public class UserController {

  @Autowired
  private UserService userService;

  @GetMapping
  public List<User> findAll() {
    return userService.findAll();
  }
}

application.yml配置文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
    hikari:
      minimum-idle: 5
      maximum-pool-size: 100
      connection-test-query: SELECT 1
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:mapper/**/*.xml

数据库表结构

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `name` varchar(20) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

示例二

下面给出第二个示例。

Book实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Book {
  private Long id;
  private String name;
}

BookMapper接口

@Mapper
public interface BookMapper extends BaseMapper<Book> {
}

BookController接口

@RestController
@RequestMapping("/books")
public class BookController {

  @Autowired
  private BookMapper mapper;

  @GetMapping
  public List<Book> findAll() {
    return mapper.selectList(null);
  }

}

application.yml配置文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
    hikari:
      minimum-idle: 5
      maximum-pool-size: 100
      connection-test-query: SELECT 1
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
  mapper-locations: classpath*:mapper/**/*.xml

数据库表结构

CREATE TABLE `book` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `name` varchar(20) DEFAULT NULL COMMENT '书名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

以上就是完整的“SpringBoot集成MybatisPlus报错的解决方案”攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成MybatisPlus报错的解决方案 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java灵活使用枚举表示一组字符串的操作

    下面我将详细讲解Java灵活使用枚举表示一组字符串的操作的完整攻略。 什么是枚举 枚举类型,又称为枚举类,是一种特殊的数据类型。枚举类型可以定义一些有限个数的元素,这些元素通常是相互独立、同级别的常量。 在Java中,可以使用关键字 enum 来定义枚举类。例如: enum Color { RED, GREEN, BLUE; } 上面的代码定义了一个枚举类 …

    Java 2023年5月27日
    00
  • Java Unsafe学习笔记分享

    下面是关于“Java Unsafe学习笔记分享”的完整攻略: 什么是Java Unsafe Java Unsafe是一个神奇的类,由于它可以直接操作JVM内存,所以被称为“不安全”类。它提供了强大的内存操作能力,其中包括: 直接操作内存; 获取对象、字段以及数组的偏移量; 绕过访问修饰符,访问私有方法和属性; 其他一些低层级的操作。 由于Unsafe存在一定…

    Java 2023年5月26日
    00
  • 提高开发质量的 5 个必要实践

    单元测试 什么是单元测试 ? 单元测试通常是指对一个函数或方法测试。单元测试的目的是验证每个单元的行为是否符合预期,并且在修改代码时能够快速检测到任何潜在的问题。通过编写测试用例,我们可以验证这些模块在特定输入下是否产生正确的输出。单元测试的目的是确保每个模块在各种情况下都能正常运行。 写单元测试的好处 可以带来以下几个好处: 提高代码质量:单元测试可以我们…

    Java 2023年4月25日
    00
  • Java后缀数组之求sa数组的实例代码

    Java后缀数组是一种经典的字符串匹配算法,可以实现快速求解字符串的后缀数组(sa数组)。下面我们将介绍如何在Java中编写求解sa数组的实例代码。 步骤一:构造后缀数组 首先我们需要准备一个包含原始字符串所有后缀的数组(称为“后缀数组”)。这个数组的元素类型为Suffix,其中Suffix类的定义如下: class Suffix implements Co…

    Java 2023年5月26日
    00
  • JavaSpringBoot报错“HttpMediaTypeNotSupportedException”的原因和处理方法

    原因 “HttpMediaTypeNotSupportedException” 错误通常是以下原因引起的: 媒体类型不支持:如果您的媒体类型不支持,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们受支持。 媒体类型不正确:如果您的媒体类型不正确,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们正确。 解决办法 以下是解决 …

    Java 2023年5月4日
    00
  • Java 异常的栈轨迹(Stack Trace)详解及实例代码

    Java 异常的栈轨迹,简称 Stack Trace,是指当 Java 程序在发生异常时,系统会自动生成一个异常堆栈信息,记录异常发生的位置、异常类型、异常信息等具体信息。通过 Stack Trace 信息,我们可以定位问题所在,进而快速排除代码中的异常。 以下是详细的攻略步骤: 1. 什么是 Stack Trace Stack Trace 是一种异常堆栈信…

    Java 2023年5月27日
    00
  • 浅谈Java中ArrayList线程不安全怎么办

    针对“浅谈Java中ArrayList线程不安全怎么办”,我为您提供以下攻略: 一、线程不安全的原因 在 Java 中,ArrayList 是一个非线程安全的集合类。这是因为在集合中,元素的增加或者删除可能涉及到内部数组的扩容或缩容等操作,而这些操作可能会导致多个线程同时访问同一个 ArrayList 实例,产生线程安全问题。 二、解决方案 为了解决这个问题…

    Java 2023年5月26日
    00
  • Java实现实时监控目录下文件变化的方法

    Java实现实时监控目录下文件变化的方法可以通过使用Java 7或更高版本中的WatchService类来实现。下面是实现此方法的详细步骤。 第一步:创建WatchService对象 使用Java的标准库提供的WatchService类,可以监控文件系统中的更改。可以通过以下方式创建WatchService对象: WatchService watchServ…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部