【JavaEE进阶】MyBatis入门
目录
🌴前言
🌲什么是MyBatis?
🌳准备工作
🚩创建工程
🚩配置数据库连接字符串
🚩数据准备
🚩编写持久层代码
🍃单元测试
🌴前言
在应⽤分层学习时,我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao.
之前的案例中,请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调⽤ Service进⾏业务逻辑处理,Service再调⽤Dao,但是Dao层的数据是Mock的,真实的数据应该从数据库中读取.
我们学习MySQL数据库时,已经学习了JDBC来操作数据库,但是JDBC操作太复杂了
JDBC操作简单回顾:
- 1. 创建数据库连接池DataSource
- 2. 通过DataSource获取数据库连接Connection
- 3. 编写要执⾏带?占位符的SQL语句
- 4. 通过Connection及SQL创建操作命令对象Statement
- 5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
- 6. 使⽤Statement执⾏SQL语句
- 7. 查询操作:返回结果集ResultSet,更新操作:返回更新的数量
- 8. 处理结果集
- 9. 释放资源
🌲什么是MyBatis?
MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。
- MyBatis本是Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis。2013年11⽉迁移到Github
- 官网:MyBatis中文网
在上⾯我提到⼀个词:持久层
- 持久层:指的就是持久化操作的层,通常指数据访问层(dao),是⽤来操作数据库的.
简单来说MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具
接下来,我们就通过⼀个⼊⻔程序,让⼤家感受⼀下通过Mybatis如何来操作数据库
🌳准备工作
🚩创建工程
创建springboot⼯程,并导⼊mybatis的起步依赖、mysql的驱动包
这里只演示导入mybatis的起步依赖、mysql的驱动包。不会创建springboot的小伙伴参考博主写的 【JavaEE进阶】第一个Spring Boot程序_java ee boot-CSDN博客
项⽬⼯程创建完成后,⾃动在pom.xml⽂件中,导⼊Mybatis依赖和MySQL驱动依赖
此时运行项目的话就会报错:
只要把pom文件中关于mybatis的依赖注释掉,就可以运行,此处不在展示
我们在添加完mybatis依赖之后,需要进行数据库的配置
🚩配置数据库连接字符串
Mybatis中要连接数据库,需要数据库相关参数配置
- MySQL驱动类
- 登录名
- 密码
- 数据库连接字符串
application.yml配置文件如下:
🚩数据准备
创建用户表,并创建对应的实体类User
创建userinof表如下
当前已经创建好了一张表,若想做查询操作,那么查询出来需要放到一个对象中,那么就需要创建对应的实体类UserInfo
由于数据库单词之间采用蛇形,而java单词之间喜欢采用驼峰,所以这里我们进行一个简单的转换。其他实体类的属性名与表中的字段名⼀⼀对应
代码:
🚩编写持久层代码
我们通过mybatis来实现:select * from userinfo;
在项⽬中,创建持久层接⼝UserInfoMapper
我们在该接口中提供一个方法,希望用它来完成上述sql语句的查询
代码:
Mybatis的持久层接⼝规范⼀般都叫XxxMapper
@Mapper注解:表⽰是MyBatis中的Mapper接⼝
- 程序运⾏时,框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
- @Select注解:代表的就是select查询,也就是注解对应⽅法的具体实现内容.
🍃单元测试
我们需要测试哪一个方法,就在该方法范围中直接生成测试代码即可。
第一步:在{}范围内点击右键
第二步:
第三步:
第四步:勾选你需要生成测试的方法(当前只有写了这一个方法),点击OK即可
此时就会在Test文件中,生成测试类:测试类上添加了注解@SpringBootTest,该测试类在运⾏时,就会⾃动加载Spring的运⾏环境.我们通过@Autowired这个注解,注⼊我们要测试的类,就可以开始进⾏测试了需要加上@SpringBootTest注解
编写测试代码:
运行结果:
总结:Mybatis操作步骤
- 1. 引入依赖(mybatis/mysql)
- 2. 配置数据库相关信息
- 3. 数据准备,实体类准备
- 4. 编写Mapper代码(编写的是接口,@Mapper注解)
- 5. 编写测试代码(@SpringBootTest注解,测试哪个类的方法就注入哪个是类)