欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot整合Mybatis踩坑记

程序员文章站 2022-05-22 11:13:47
...

  • 最近在研究小程序开发,顺便又把之前落下的框架拿出来熟悉一下。由于公司一直使用的SSM,所以也没用到其它框架。前几天朋友让研究一下并发,顺便想搭建一个新项目试试,才发现自己活回去了。一路踩坑,哈哈。记录一下吧!

  • 我就从零开始架构搭建,新入坑的小伙伴也可以参考一下。前段时间研究了一下MyBatis-generator代码生成器,发现了MyBatis-plus要高级好用的多,发现自己还一直活在梦里哎,卑微码畜在线卖惨。新入坑的小伙伴可以学习一下。本来想用MyBatis-plus的。但是那个东西对于我也是新东西。等我把这个写完后面有时间再出一篇整合MyBatis-plus的博客吧。

1、项目搭建,新建SpringBoot项目:

  • 新建项目、第一步配置默认。
    SpringBoot整合Mybatis踩坑记

  • 填写基础包名
    SpringBoot整合Mybatis踩坑记

  • 选择几个默认的依赖,也可以不选。lombok是这几个基本是项目需要。具体作用可自己去了解。
    SpringBoot整合Mybatis踩坑记

  • 然后填项目名,finish,一个活生生的SpringBoot项目就建好了。
    SpringBoot整合Mybatis踩坑记

  • 删除多余碍眼文件,剩下如下
    SpringBoot整合Mybatis踩坑记

  • 接下来我们开始搭建项目骨架,整合相关架构和配置。

2、整合MyBatis

  • 可以看到、之前选的默认依赖已经加到pom文件里面去了。后面需要啥在慢慢加。
  • 我们来看application.yml的配置:
server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    
mybatis:
  mapper-locations: classpath*:com/springbootmybatis/sbm/**/dao/mapper/*.xml
  type-aliases-package: com.springbootmybatis.sbm.*.dao

#showSql
logging:
  level:
    com:
      example:
        mapper : debug
  • 快速创建两个实体类,可用代码生成工具直接生成,在我另一篇博客中有代码生成器详细使用教程>>不会的@here,新建个Service来测试数据库连接是否成功。对数据库表进行增删查改。
  • 这里就演示个简单的插入吧。新建一个测试类。

SpringBoot整合Mybatis踩坑记

@RunWith(SpringRunner.class)
@SpringBootTest
class OrderServiceTest {
    @Autowired
    private OrderService orderService;
    @Test
    public void test(){
        Orders orders = new Orders();
        orders.setId( "123" );
        orders.setMoney( new Double(12) );
        orders.setOrdertime( new Date() );
        orders.setPaystate( 1 );
        orders.setUserId( 222 );
        int result = orderService.insertOrderData( orders );
        if(0 == result){
            System.out.println("插入失败!!!!!!!!!!!!!!!!");
        }else{
            System.out.println("插入成功!!!!!!!!!!!!!!!!");
        }
    }

}

SpringBoot整合Mybatis踩坑记


  • 看看打印的日志,已经成功存进数据库了。如果你运行还有问题的话。看看后面的配置。

SpringBoot整合Mybatis踩坑记


  • 再看看数据库、数据也确实插入进去了。说明我们的配置基本是没问题的。

SpringBoot整合Mybatis踩坑记

3、Could not autowire. No beans of ‘OrdersMapper’ type found. Inspection info:Checks autowiring problems in a bean class.

  • description:bean注入失败。

SpringBoot整合Mybatis踩坑记
遇到这个问题是因为SpringBoot加载bean的时候没有扫描到对应的bean和xml文件。一般需要改四个地方:

  • 1、检查application.yml里面对Mybatis的配置。上面我已经加了的。检查这两个路径是否与你的项目对应正确。可回去看我的项目结构对应修改。第一个对应的是dao层对应的映射文件xml。第二各对应的是mapper接口的包名。
mybatis:
  mapper-locations: classpath*:com/springbootmybatis/sbm/**/dao/mapper/*.xml
  type-aliases-package: com.springbootmybatis.sbm.*.dao
  • 2、在对应的Mapper接口加上@Mapper注解,启动类加上@MapperScan(“com.springbootmybatis.sbm.*.dao”),这是让Springboot启动的时候扫描Mapper文件。MapperScan的路径就是1里面配置的第二个路径。

SpringBoot整合Mybatis踩坑记


SpringBoot整合Mybatis踩坑记

  • 3、在pom文件里面build里面加入以下配置。

SpringBoot整合Mybatis踩坑记

		<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
  • 4、检查Mapper接口heMapper.xml文件的名字是否一致。名字不一致也会导致启动失败。

  • 5、如果你改完以上都还是红的,还是红色的。把这里等级改成warning即可。貌似也不影响代码运行。强迫症专用。但是这个问题治标不治本。如果代码配置有问题改了也白搭。
    SpringBoot整合Mybatis踩坑记
    以下是我的pom文件,可参考。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springbootMybatis</groupId>
    <artifactId>sbm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sbm</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <configurationFile>src/main/resources/mybatis-generator/mybatis-generator-cfg.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.5</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

  • 注:此项目是自己随手搭建测试使用代码生成器用的。可能不太规范。仅供参考。大佬路过请指点。如有错漏、还望指正。需要源码的可留言or私信。