MyBatis是一种持久层框架,用于简化JDBC的开发。
持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的。
MyBatis操作数据库,分为下面四步:
- 准备工作(创建springboot项目,准备数据库表,实体类)
- 引入MyBatis相关依赖,配置相关文件
- 编写代码(分为注解/XML两种)
- 测试
导⼊ mybatis的起步依赖、mysql的驱动包。
导入mysql驱动包的原因是因为MyBatis是一种持久层框架,具体的数据存储和数据操作还是在mysql中,所以导入mysql驱动是必要的。
项目创建成功后,pom.xml文件中自动导入两个依赖。
当然也可以在maven仓库中找到相关依赖,手动添加。
如何在之前创建项目中添加这些依赖?
MyBatis是操作数据库的,那么肯定需要有数据库了,可以在MySql中创建一个数据库,方便学习操作。
创建数据库,创建userinfo表,添加数据:
mysql> CREATE TABLE `userinfo` (
-> `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(),
-> PRIMARY KEY ( `id` )
-> ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
-> VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
-> VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
-> VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
-> VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
Query OK, 1 row affected (0.00 sec)
mysql> select * from userinfo;
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
| id | username | password | age | gender | phone | delete_flag | create_time | update_time |
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
| 1 | admin | admin | 18 | 1 | 18612340001 | 0 | 2023-11-16 13:20:09 | 2023-11-16 13:20:09 |
| 2 | zhangsan | zhangsan | 18 | 1 | 18612340002 | 0 | 2023-11-16 13:20:22 | 2023-11-16 13:20:22 |
| 3 | lisi | lisi | 18 | 1 | 18612340003 | 0 | 2023-11-16 13:20:35 | 2023-11-16 13:20:35 |
| 4 | wangwu | wangwu | 18 | 1 | 18612340004 | 0 | 2023-11-16 13:20:52 | 2023-11-16 13:20:52 |
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
4 rows in set (0.00 sec)
创建实体类,userInfo.java:
package com.example.mybatisdemo.model;
import lombok.Data;
import java.util.Date;
@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;
}
配置application.yml⽂件, 配置内容如下:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 131452
driver-class-name: com.mysql.cj.jdbc.Driver
其中mybatis_test是要操作的数据库,username是用户名,一般都是root,password是你数据库的密码。
其他的一般不需要修改,使用时直接复制就行。
application.properties⽂件配置和yml相同,只是格式的区别。
在项⽬中, 创建mapper包,包中创建持久层接⼝UserInfoMapper。
Mybatis的持久层接⼝规范⼀般都叫 XxxMapper,放在mapper包中,这是一种企业规范。
代码:
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserInfoMapper {
//查询所有⽤⼾
@Select("select username, password, age, gender, phone from userinfo")
public List<UserInfo> queryAllUser();
}
@Mapper注解:
表⽰是MyBatis中的Mapper接⼝,用于与MyBatis框架交互。
@Select注解:
代表的就是select查询,也就是注解对应⽅法的具体实现内容。
但是这种方法些许麻烦。
其实,在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类 ,我们可以直接使⽤这个测试类来进⾏测试。
在需要测试的接口中,使用快捷键Alt+Insert,点击Test:
勾选要测试的方法,点击OK,⽤Idea⾃动⽣成测试类:
编写测试代码:
@Slf4j
@SpringBootTest
class UserInfoMapperTest {
@Autowired
private UserInfoMapper userInfoMapper;
@Test
void queryAllUser() {
List<UserInfo> list = userInfoMapper.queryAllUser();
log.info(list.toString());
}
}
运行结果:
@SpringBootTest 注解:
是 Spring Boot 提供的一个注解,用于在 Spring Boot 应用中启动一个完整的测试环境。
@Slf4j 注解:
是Lombok提供的一种注解,用于打印日志。