ORM模型

ORM(object relation Mapping):对象关系映射。这里的object是指Java实体类中的对象,relation是指数据库中的表,Mapping就是Java实体类中对象与数据库中表之间的对应关系,就像下图中所展示的那样:

接下来是传统JDBC程序的设计缺陷:1、大量配置信息硬编码;2、大量的无关业务处理的编码;3、扩展优化极为不便。

MyBatis概述

MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架。所谓的持久层其实就是能将数据保存到数据库中。

它的特点有:1、避免传统的JDBC硬编码,数据库配置信息都是通过xml文件进行配置,灵活度很高;2、使用XML配置或者注解,很大程度让我们自己书写sql语句,使得数据库优化成为可能;3、POJO对象和数据库记录直接映射, 你只需要创建数据库,而POJO对象则由MyBatis替你完成;4、完善的文档支持,MyBatis有着非常完善的文档,能帮你快速学习。

同时还有一些优点:1、简单易学,快速上手,学习成本较低;2、提供了数据库交互信息配置化;3、提供了动态SQL处理。

一般在以下场景中使用MyBatis:1、更加关注SQL优化的项目,对并发要求较为严苛;2、需求频繁更新改动的项目。

MyBatis开发环境搭建

MyBatis的官方网站点这里,如下图:

其实也可以去github上下载离线包,点击这里,目前最新版是3.5.3:

一般学习的时候下载第一个就行,第二个是源码包,第三个是另一种格式的源码包。解压这个zip文件,得到这些内容:

lib包是MyBatis在使用过程中可能会使用到的包,mybatis-3.5.3.jar是已经封装好的jar包,如果你想使用MyBatis就可以引入这个包,mybatis-3.5.3.pdf是官方文档

还有一种方式就是在Maven上配置MyBatis的依赖,一般在实际开发中这种方式用的比较多,点这里

1
2
3
4
5
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>

如果你是在传统项目中引入MyBatis,则需要点击这里下载对应的包,要么作为classpath的依赖路径引入,要么作为依赖项目引入。

如果是Maven项目,按照前面介绍的配置,直接设置相关的依赖就好了:第一步,先去Maven仓库查询maven的依赖配置;第二步,在Maven项目的pom.xml文件中添加依赖;第三步,查看项目依赖及本地仓库是否已经存在了MyBatis。

小项目实战

接下来通过一个数据查询流程来体会一下MyBatis的核心API操作流程。使用IDEA来创建一个Maven项目,注意其中的GroupId是项目名称,ArtifactId是项目中某一模块的名称,Version是版本号。

点击这里,获取MyBatis的配置依赖:

1
2
3
4
5
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>

放到pom.xml文件的<dependencies>标签中,顺便把mysql-connector-javajunit的依赖也添加进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>mb-project</groupId>
<artifactId>DemoOne</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>

</dependencies>
</project>

接下来在main/resource文件下面新建一个mybatis.xml,然后去之前那个mybatis-3.5.3.pdf文件里面找到getting started部分找到<configuration>的配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 使用数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mbdemo"/>
<property name="username" value="root"/>
<property name="password" value="envy123"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件的配置路径 -->
<mappers>
<mapper resource="mapper/usersMapper.xml"/>
</mappers>
</configuration>

然后开始创建一个数据库mbdemo:

1
2
3
4
5
6
7
8
9
10
11
12
13
use mbdemo;
create table users(
id int auto_increment primary key comment '用户编号',
username varchar(50) comment '登录账号',
password varchar(50) comment '登录密码',
nickname varchar(20) comment '用户昵称'
)engine=innodb default charset=utf8;

insert into users values(1,'admin','admin','管理员');
insert into users values(2,'envy','envy','思录');
insert into users values(3,'administor','administor','超级管理员');

select * from users;

接着在java文件夹中新建一个文件夹com.test.entity,接着在entity文件夹中新建一个实体类Users:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.test.entity;

public class Users {
private Integer id;
private String username;
private String password;
private String nickname;

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 getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getNickname() {
return nickname;
}

public void setNickname(String nickname) {
this.nickname = nickname;
}

@Override
public String toString() {
return "Users{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}

接着在resource文件夹中新建一个Mapper文件夹,里面再新建一个usersMapper.xml文件(注意名称必须是实体类名小写+Mapper.xml不可以修改)。
还是去之前那个mybatis-3.5.3.pdf文件里面找到getting started部分找到的配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace命名空间
通常情况下命名空间的值就是当前操作实体类的全名称
-->

<mapper namespace="com.test.entity.Users">
<select id="usersList" resultType="com.test.entity.Users">
select * from users;
</select>
</mapper>

接着在test/java文件夹下面新建一个testDemo1.java的测试文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import com.test.entity.Users;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class testDemo1 {
/**
* 使用junit进行测试
*/

@Test
public void testOne() throws IOException {
//初始化mybatis配置环境
String resource = "mybatis.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

//打开数据库之间的连接
SqlSession session = sqlSessionFactory.openSession();

List<Users> usersList = session.selectList("usersList");

for(Users user:usersList){
System.out.println(user);
}
session.close();
}
}

运行该测试文件,输出结果:

1
2
3
Users{id=1, username='admin', password='admin', nickname='管理员'}
Users{id=2, username='envy', password='envy', nickname='思录'}
Users{id=3, username='administor', password='administor', nickname='超级管理员'}

Mybatis核心API操作流程

Mybatis核心的API操作流程如下图所示: