【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误

发布于:2025-04-19 ⋅ 阅读:(23) ⋅ 点赞:(0)

1.什么是MyBatis?

• MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发。
• MyBatis本是 Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis 。2013年11⽉迁移到Github.
• 官⽹:MyBatis中⽂⽹

在上⾯我们提到⼀个词:持久层
• 持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的.

在这里插入图片描述
简单来说 MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具

接下来,我们就通过⼀个入门程序,让⼤家感受⼀下通过Mybatis如何来操作数据库

2.准备工作

2.1.创建项目

(1)创建springboot项目

在这里插入图片描述

(2)导入 mybatis的起步依赖、mysql的驱动包

在这里插入图片描述

在pom.xml文件中会有两个依赖:

		// MyBatis依赖
		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>
		
		//MySQL驱动依赖
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

2.2.MySQL数据准备

(1)创建数据库:

CREATE DATABASE mybatis_study DEFAULT CHARACTER SET utf8mb4;

(2)使用数据库

-- 使⽤数据数据
USE mybatis_study;

(3)创建用户表


-- 创建表[⽤⼾表]

CREATE TABLE `user_info` (
 `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
 `username` VARCHAR ( 127 ) NOT NULL,
 `password` VARCHAR ( 127 ) NOT NULL,
 `age` TINYINT ( 4 ) NOT NULL,
 `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
 `phone` VARCHAR ( 15 ) DEFAULT NULL,
 `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now() ON UPDATE now(),
 PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 

(4)添加用户信息

-- 添加⽤⼾信息
INSERT INTO mybatis_study.user_info( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_study.user_info( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_study.user_info( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_study.user_info( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

2.3.创建对应的实体类

实体类的属性名与表中的字段名⼀⼀对应

@Data
public class UserInfo {

    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

在这里插入图片描述
注意:在实际开发中不管什么实体类都要设置删除标志、创建时间、修改时间

3.写配置文件和获取数据

3.1写配置文件

Mybatis中要连接数据库,需要数据库相关参数配置
• MySQL驱动类
• 登录名
• 密码
• 数据库连接字符串

application.properties文件中配置:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test? characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root

application.yml文件中配置:

# 数据库连接配置
spring:
  datasource:
    # 如果 MySQL下载在本地电脑上用下面的方式
    # url: jdbc:mysql://127.0.0.1:3306/mybatis_study?characterEncoding=utf8&useSSL=false
    
    # MySQL在远程服务器上
    url: jdbc:mysql://x.x.x.x:3306/mybatis_study?characterEncoding=utf8&useSSL=false
    username: root  #MySQL账号
    password: root  #MySQL密码
    driver-class-name: com.mysql.cj.jdbc.Driver

注意事项:
如果使⽤ MySQL 是 5.x 之前的使⽤的是"com.mysql.jdbc.Driver",如果是⼤于 5.x 使⽤的是“com.mysql.cj.jdbc.Driver”

3.2 持久层代码

在项⽬中, 创建持久层接⼝UserInfoMapper:

@Mapper
public interface UserInfoMapper {

	// 查询所有用户
    @Select("select * from user_info")
    List<UserInfo> selectAll();
}

Mybatis的持久层接⼝规范⼀般都叫 XxxMapper

@Mapper注解:表⽰是MyBatis中的Mapper接⼝
• 程序运⾏时, 框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
• @Select注解:代表的就是select查询,也就是注解对应⽅法的具体实现内容.

4.单元测试

(1)在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类 ,我们可以直接使⽤这个测试类来进⾏测试.
在这里插入图片描述

(2)需要测试的类中 右键
在这里插入图片描述

点击Test...
在这里插入图片描述

然后会进入到一个创建测试类的框框:
在这里插入图片描述

会出现下面的类:

class UserInfoMapperTest {

    @BeforeEach
    void setUp() {
    }

    @AfterEach
    void tearDown() {
    }

    @Test
    void selectAll() {
    }
}

可以在里面写测试的内容,我们要测试的是利用MyBatis获取MySQL数据库中的内容:


//使用日志打印
@Slf4j
class UserInfoMapperTest {

    @Autowired
    private UserInfoMapper userInfoMapper;

    @BeforeEach
    void setUp() {
        log.info("setUp");
    }

    @AfterEach
    void tearDown() {
        log.info("tearDown");
    }

    @Test
    void selectAll() {
        List<UserInfo> list = userInfoMapper.selectAll();
        log.info(list.toString());
    }
}

运行结果:
在这里插入图片描述
已经使用@Autowired为什么是空指针呢?
答:运行时只是执行了该类,Spirng项目并没有运行,IoC容器中并没有UserInfoMapper的Bean

解决方法:在测试类上添加测试注解@SpringBootTest

@Slf4j
@SpringBootTest //启动Sring 容器
class UserInfoMapperTest {

    @Autowired
    private UserInfoMapper userInfoMapper;

    //在测试方法运行之前启动
    @BeforeEach
    void setUp() {
        log.info("setUp");
    }

    //在测试方法运行之后启动
    @AfterEach
    void tearDown() {
        log.info("tearDown");
    }

    @Test
    void selectAll() {
        List<UserInfo> list = userInfoMapper.selectAll();
        //把列表中的数据分行打印
        for(Object item: list) {
            log.info(item.toString());
        }
    }
}

运行结果:
在这里插入图片描述
下章讲解为什么打印的有空值

5.连接数据库时常见的错误

5.1 url 配置错误

在这里插入图片描述
检查url:
(1)使用的是远程数据库,ip地址填写错误
(2)端口号错误
(3)等等

5.2 MySQL账号密码错误

在这里插入图片描述
在这里插入图片描述
检查账号密码是否出错,改正后重新测试

5.3 找不到数据库

在这里插入图片描述
在这里插入图片描述

检查数据库名

5.4 表错误

在这里插入图片描述
检查Mapper类相关表的操作中表拼写错误

5.3 云服务器的端口没有开放

(1)进入到云服务器的控制台

(2)点击使用的云服务器
在这里插入图片描述

(3)点击 配置安全组规则
在这里插入图片描述
(4)添加规则
在这里插入图片描述
(5)开放端口
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到