Mybatis 介绍
# 0.Mybatis 介绍
Mybatis 是一个很流行的持久层框架
# 持久层技术解决方案
我们之前学习过三层架构的概念。
三层架构
- 表现层:是用于展示数据的
- 业务层:是处理业务需求
- 持久层:是和数据库交互的
其中,实现持久层的一些方案有:
- JDBC:最底层的方案,主要包括 Connection、PreparedStatement、ResultSet 等对象
- Spring 的 JdbcTemplate:Spring 中对 JDBC 的简单封装
- Apache 的 DBUtils:和 JdbcTemplate 很像,也是对 JDBC 的简单封装
JDBC 是规范,JdbcTemplate 和 DBUtils 都只是工具类,只做了简单的封装,使用起来还需要做很多的准备工作。
我们来回顾一段 JDBC 程序
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");
//定义 sql 语句 ?表示占位符
String sql = "select * from user where username = ?";
//获取预处理 statement
preparedStatement = connection.prepareStatement(sql);
//设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
//向数据库发出 sql 执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")
+ resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
} finally{
//释放资源
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement != null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
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
51
52
53
54
55
56
57
58
使用 JDBC 有如下问题:
- 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,需要自己引入数据库连接池解决
- 我们在开发的时候,只关注 SQL 怎么写,其他的并不重要,例如加载驱动类,关闭 ResultSet、Connection 等。而使用 JDBC,为了完成一个简单的查询,需要准备很多很多,都是繁琐的重复的操作
- SQL 语句在代码中硬编码,代码不易维护,SQL 有改动就需要改变 Java 代码。
- 使用 PreparedStatement 向占有位符号传参数存在硬编码,因为 SQL 语句的 where 条件不一定,可能多也可能少,修改 SQL 还要修改代码,不易维护。
- 对结果集解析存在硬编码(查询列名),SQL 变化导致解析代码变化,如果能将数据库记录封装成对象解析比较方便。
# Mybatis 概述
Mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 Statement、关闭对象等繁杂的过程。
Mybatis 通过 XML 或注解的方式,将要执行的各种 Statement 配置起来,并通过 Java 对象和 Statement 中 SQL 的动态参数进行映射,生成最终要执行的 SQL 语句,最后执行 SQL 并将结果映射为 Java 对象并返回,大大简化了持久层的开发!
Mybatis 采用 ORM 思想解决了实体和数据库映射的问题,对 JDBC 进行了封装,屏蔽了 JDBC 底层访问细节,使我们不用与 JDBC API 打交道,就可以完成对数据库的持久化操作。
什么是 ORM:ORM 全称 Object Relational Mappging 对象关系映射,简单的说:就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
例如有一个数据库表 user,有 id 列和 user_name 列; 而我们可以定义一个 JavaBean,类名 User,类的成员有 ID 和 user_name,Mybatis 可以自动帮我们完成 数据库表记录,和对象的转换!我们可以将对象当作是数据库表的一条记录,通过操作对象的方法(查询,更新,删除)来完成对数据库表记录的增删改查。
我们后续来通过一个 Mybatis 的案例来加深对 Mybatis 的理解。
Mybatis 的前身是 iBatis,所以我们后续使用 Mybatis 的过程中,看到了 iBatis,也无需奇怪
- 01
- 中国网络防火长城简史 转载10-12
- 03
- 公告:博客近期 RSS 相关问题10-02