简介
什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。(来自官网)
那么mybatis到底是什么呢?说白了就是一个ORM(object relationship map)框架,可以让数据库中的表和Java中的实体类相互转换。
假设有一个user表,其表结构如下:
User表:
create table user
(
id int auto_increment primary key,
username varchar(32) not null comment '用户名称',
birthday datetime null comment '生日',
sex char null comment '性别',
address varchar(256) null comment '地址'
)charset = utf8;
mybatis要做的事情就是将上述的表结构转换为如下实体类User:
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String username;
private String sex;
private String address;
private Date birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", birthday=" + birthday +
'}';
}
}
上述转换中,数据表中的每行属性名,对应的是实体类中的属性。例如user表中id列名,对应的就是user实体类中的id属性;username对应的是实体类中username属性。同时呢,在实体类中,每个属性必须有自己的set()和get()方法,tostring()方法不做要求。
经过如上转换后,我们只需要操作在实际开发中操作实体类即可,就不需要写过多的JDBC代码,同时也完全发挥了Java的面向对象特性(关系数据库是面向关系的)。
mybatis的底层实现
那么mybatis的底层实现是怎样的呢?其实说白了就是将Java公司提供的JDBC进行再一次封装,从而实现ORM框架。底层实现不必知道,只要知道怎么用就行了。