Springboot整合Mybatis案例以及过程中常见报错分析

一、简介

刚学完Springboot技术与mybatis整合,发表此文章主要是巩固自己的学习以及对其他刚接触Springboot的小白们有帮助,文章内容不仅包含了mybatis整合的步骤,也包含了整合过程中一些我遇到过的报错,这也是我第一次发文章,希望对大家有所帮助。

IDE:idea、DB:mysql、JDK:1.8

二、整合步骤

1.创建模块

创建一个Springboot项目
在这里插入图片描述在这里插入图片描述
创建完模块后pow.xml文件会自动导入相应的坐标

<dependencies>
        <!--1.导入对应的starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.编写配置文件

将原来的application.propertiess删除,创建application.yml配置文件(SpringBoot底层会把application.yml文件解析为application.properties),使用properties格式编写也可以

#2.配置相关信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db
    username: root
    password: root

3.编写实体类和映射接口

下面是我的数据库表结构, 我的数据库名称是ssm.db,表名是tbl_book
在这里插入图片描述

实体类编写
在java.com.itxhj.domain包下创建Book.class文件

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

映射接口编写
在java.com.itxhj.dao包下编写BookDao接口
因为主要目标是整合mybatis,所以这边我只编写了一个根据id查询的方法
注意需要添加@Mapper被容器识别

@Mapper
public interface BookDao {
    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);
}

4.编写测试类

在测试类中测试编写的方法

@SpringBootTest
class Springboot05MybatisApplicationTests {
    @Autowired
    private BookDao bookDao;
    @Test
    void contextLoads() {
        System.out.println(bookDao.getById(1));
    }
}

编写完后项目结构如下:
在这里插入图片描述

5.测试方法

运行测试类,测试成功
在这里插入图片描述
完美,成功的实现了Springboot整合mybatis,是不是觉得很方便,对比之前学的ssm整合mybatis,简直不要太快乐了,希望各位小伙伴都能拿成功走到这一步~

三、整合Mybatis中常见的问题

下面是我在整合过程中出现过的报错

1.Access denied for user ‘root’@‘localhost’ (using password: YES)

该报错是数据库连接失败
解决方法:
1.检查数据库的配置文件的信息pow有没有导入对应的坐标(整合步骤中有)
2.特别注意数据库连接的密码是纯数字的话要用双引号!!!(就是你的application.yml文件中的password字段)

#2.配置相关信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db
    username: root
    password: "123456"

2.The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specific time zone value if you want to utilize time zone support.

出现这个报错是因为当前使用的SpringBoot版本是2.5.4,对应的坐标设置中Mysql驱动使用的是8x版本。当SpringBoot2.4.3(不含)版本之前会出现一个小BUG,就是MySQL驱动升级到8以后要求强制配置时区,如果不设置会出问题。这也是mysql5和mysql8的区别。
解决方法:
1.mysql数据库服务器设置时区
2.在jdbc配置url串中设置时区
下面是第2种解决方法:
在application.yml文件的url中末尾添加?serverTimezone=UTC修改时区

    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC

3.Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

这个是运行结果中出现的一个红色文字,虽然不是报错,但是建议大家修改一下。
意思是说数据库驱动过时的警告,根据提示修改配置即可,弃用com.mysql.jdbc.Driver,换用com.mysql.cj.jdbc.Driver

	# 在application.yml文件中修改
    driver-class-name: com.mysql.cj.jdbc.Driver

四、总结

  1. 整合操作需要勾选MyBatis技术和mysql,也就是导入MyBatis对应的starter以及mysql的驱动坐标

  2. 数据库连接相关信息转换成配置

  3. 数据库SQL映射需要添加@Mapper被容器识别到

  4. MySQL 8.X驱动强制要求设置时区:
    修改url,添加serverTimezone设定
    修改MySQL数据库配置

  5. 驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值