当前位置: 首页 > news >正文

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

MyBatis入门

  • 1.什么是MyBatis?
  • 2.准备工作
    • 2.1.创建项目
    • 2.2.MySQL数据准备
    • 2.3.创建对应的实体类
  • 3.写配置文件和获取数据
    • 3.1写配置文件
    • 3.2 持久层代码
  • 4.单元测试
  • 5.连接数据库时常见的错误
    • 5.1 url 配置错误
    • 5.2 MySQL账号密码错误
    • 5.3 找不到数据库
    • 5.4 表错误
    • 5.3 云服务器的端口没有开放

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=falseusername: 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 {@BeforeEachvoid setUp() {}@AfterEachvoid tearDown() {}@Testvoid selectAll() {}
}

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


//使用日志打印
@Slf4j
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@BeforeEachvoid setUp() {log.info("setUp");}@AfterEachvoid tearDown() {log.info("tearDown");}@Testvoid selectAll() {List<UserInfo> list = userInfoMapper.selectAll();log.info(list.toString());}
}

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

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

@Slf4j
@SpringBootTest //启动Sring 容器
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;//在测试方法运行之前启动@BeforeEachvoid setUp() {log.info("setUp");}//在测试方法运行之后启动@AfterEachvoid tearDown() {log.info("tearDown");}@Testvoid 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)开放端口
在这里插入图片描述

相关文章:

  • PyTorch深度学习框架60天进阶学习计划 - 第45天:神经架构搜索(二)
  • Netlink套接字
  • Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现
  • DBeaver连接hive
  • DasViewer是什么?如何安装?
  • AI 组件库是什么?如何影响UI的开发?
  • 华为OD机试真题——最长的顺子(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战
  • PyTorch分布式训练调试方法(跟踪调用过程)
  • java 排序算法-快速排序
  • # 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类
  • Oracle日志系统之附加日志
  • uni-app 安卓10以上上传原图解决方案
  • 2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)
  • uniapp运行在app端如何使用缓存
  • GPU 在机器学习中的应用优势:从技术特性到云端赋能
  • 神经网络优化 - 小批量梯度下降之批量大小的选择
  • CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
  • 初创企业机器学习训练:云服务器配置对效率、成本与可扩展性的影响
  • Python项目--基于机器学习的股票预测分析系统
  • 云南鲁甸县一河滩突然涨水致4死,有人在救人过程中遇难
  • 全国首个古文学习AI大模型在沪发布,可批阅古文翻译
  • 高糖高脂食物可能让你 “迷路”
  • 陕西省烹饪餐饮行业领军人物黄建军逝世,终年53岁
  • 海关总署牵头部署开展跨境贸易便利化专项行动
  • 建投读书会·东西汇流|东西方戏剧在上海的相逢、交锋与融合