何为MyBatis
在Java程序中如果想要操作数据库,官方提供了JDBC这套API,但从开发效率而言,直接使用原生的JDBC进行开发,代码有些冗杂、开发效率也不够高,所以说就需要使用框架来协助开发。MyBatis就是一个优秀的持久层(三层架构中的DAO)框架,其主要用于简化JDBC的开发;MyBatis的底层就是JDBC,但是对其进行了高度的封装,从而简化了原生JDBC开发
使用MyBatis
准备工作
创建SpringBoot工程,引入MyBatis相关依赖
因为现在大部分的项目都是基于SpringBoot框架开发的,所以说直接在SpringBoot项目中引入MyBatis即可,并且在引入依赖时,不但需要引入MyBatis的框架,还需要引入MySQL的驱动(根据使用的数据库来引入对应的数据库驱动),因为MyBatis的底层是基于JDBC的,需要操作数据库,所以说对应的数据库的驱动是必不可少的。
准备数据库表user、实体类User
准备数据库表user来进行查询,并将查询出来的结果封装成对应的User实体对象。因为MyBatis是优秀的持久层框架,持久层在三层架构中是要从数据库中查询数据并给Service层返回数据的,为了方便使用数据,所以说要对数据库中查询出来的数据进行封装,便于后续的操作。
建表:
sql
create table user(
id int unsigned primary key auto_increment comment 'ID,主键',
username varchar(20) comment '用户名',
password varchar(32) comment '密码',
name varchar(10) comment '姓名',
age tinyint unsigned comment '年龄'
) comment '用户表';
insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
(2, 'xiaoqiao', '123456', '小乔', 18),
(3, 'diaochan', '123456', '貂蝉', 24),
(4, 'lvbu', '123456', '吕布', 28),
(5, 'zhaoyun', '12345678', '赵云', 27);
创建对象:
typescript
package com.wzb.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private String name;
private Integer age;
}
配置Mybatis
因为MyBatis操作的是数据库,而且是基于JDBC的,我们想要使用MyBatis也是需要配置数据库的连接信息的,但是和原生的JDBC有所不同,原生的JDBC是直接在源代码中进行配置的,但MyBatis中是在SpringBoot提供的application.properties文件中配置的连接信息:
完成准备工作之后,就可以开始编写MyBatis程序了。
编写MyBatis程序
编写MyBatis的持久层接口,在接口上添加注解@Mapper,代表通过注解的方式定义SQL语句,完成数据库操作。
MyBatis框架中的持久层接口按照规范都是叫......Mapper(也叫做Mapper接口),这是因为: MyBatis 最初受到iBatis的影响(MyBatis以前叫iBatis)。在iBatis中,就使用 "Mapper" 这个术语来表示数据访问对象(DAO),用于将数据库操作(如查询、插入、更新、删除)映射到 Java 方法。当MyBatis从iBatis发展而来时,延续了这个命名习惯。还有更重要的一点是: "Mapper" 这个词本身有 "映射器" 的意思。 在MyBatis的持久层接口中,它的主要作用就是将SQL语句和Java方法进行映射。
java
package com.wzb.mapper;
import com.wzb.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> selectAll();
}
MyBatis可以将数据库表中的字段和实体类中的属性一一对应(字段和属性的名字必须相同),自动封装成User的实体对象,并且由于查询结果是多条数据,会封装成多个User对象,MyBatis还会将多个User对象封装成一个userList集合,所以说该方法是返回的一个User集合。
测试MyBatis
java
package com.wzb;
import com.wzb.mapper.UserMapper;
import com.wzb.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
// 这是SpringBoot框架中的单元测试注解,当测试类的测试方法运行时,就会启动SpringBoot项目
// SpringBoot项目启动了,IOC容器就创建好了,若想测试IOC容器中的bean就可以直接注入了
class JavaWeb05MyBatisApplicationTests {
private UserMapper userMapper;
@Autowired
public JavaWeb05MyBatisApplicationTests(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Test
public void testSelectAll() {
List<User> userList = userMapper.selectAll();
for (User user : userList) {
System.out.println(user);
}
}
}
在SpringBoot的测试类中编写代码,获取Mapper的返回结果并遍历输出,发现成功获得了user表中的所有数据,并且将这些数据封装成了userList的集合:
注意:测试类所在的包必须和项目的引导类(启动类)的包名相同(或者放在引导类所在的包的子包下)。