MyBatis01_概述
本教程源码请访问:tutorial_demo
Java 从1995年正式发布至今,出现已经二十多年了,伴随着互联网的发展, Java 也在不断的发展。整个 Java 的发展过程就是一个“发现问题,解决问题”的过程。在今天,说到 Java 已经不单单是一门编程语言,更多的是围绕 Java 语言的体系以及这个体系之下的众多的框架。从业界来看,最早的 JSP\Servlet 发展到 SSH ,再到 SSM ,再到为了微服务出现的 SpringBoot 及为了分布式出现的 SpringCloud , Java 已经成为了一个王国。
学习 Java 就要学习框架,接下来我们就从还算流行的 SSM(SpringMVC+Spring+MyBatis) 框架开始我们的学习,学习的顺序是 MyBatis->Spring->SpringMVC 。
在学习这些内容之前,我假设大家学习过以下内容:
- MySQL ,能够进行单表的 CRUD 操作,能够进行多表查询及子查询;
- JDBC ,能够进行单表的 CRUD 操作,能够进行多表查询及子查询;
- 数据库连接池,连接池解决了哪些问题,用过一种数据库连接池;
- JavaWeb(Servlet、JSP、Cookie、Session、EL、JSTL、三层架构) ,知道如何接受请求,处理数据,做出响应,以及Tomcat的简单配置;
- Maven ,简单会用就可以,能够在 idea 中创建 Maven ,设置坐标;
如果上面的内容没有学过,那就把上面的内容弄明白再来学习,“欲速则不达”,很多时候最慢的办法反而是效率最高的办法。
一、什么是软件框架
提到 Java 开发,必然提到各种软件框架,或者说框架,那么什么是软件框架呢?
软件框架( software framework ),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。
简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说使用别人搭好的舞台来做编剧和表演。
----维基百科
上面是百科中的解释,归纳起来如下:
- 软件框架是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题;
- 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
我们学习的目的就很明显了,就是学习这些框架,提升我们的开发效率。
接下来我们学习第一个框架 MyBatis ,现在大家只需要知道 MyBatis 是一个持久层框架,用来和数据库交互。既然 MyBatis 和数据库交互, JDBC 也可以和数据库交互,那么 MyBatis 相比 JDBC 有哪些优势呢?
二、JDBC操作数据库的问题
下面是一段 JDBC 操作 MySQL 数据库的代码,步骤如代码中注释表示的那样,一共7步,相信大家已经很熟练了。
@Test
public void testSelect() {
//1.准备四大参数
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mybatisdb";
String username = "root";
String password = "123456";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rSet = null;
try {
//2.加载驱动
Class.forName(driverName);
//3.创建链接
conn = DriverManager.getConnection(url, username, password);
//4.创建preparedStatement
pstmt = conn.prepareStatement("select * from user");
//5.发送SQL语句
rSet = pstmt.executeQuery();
//6.处理结果
while (rSet.next()) {
User user = new User();
user.setId(rSet.getInt(1));
user.setUsername(rSet.getString(2));
user.setBirthday(rSet.getDate(3));
user.setSex(rSet.getString(4));
user.setAddress(rSet.getString(5));
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//7.关闭资源
if(rSet != null) {
rSet.close();
}
if(pstmt != null) {
pstmt.close();
}
if(conn != null) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
JDBC 问题分析:
- 上面只是一个查询操作,真正“有用”,“核心”的代码就是第4步,真实的项目中会存在很多的 CRUD 的操作,每一次都要准备参数,创建连接,释放连接,会有大量的代码冗余,从这个层面来讲代码有必要精简;
- sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 Java
代码; - 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护;
- 对结果集解析存在硬编码(查询列名), sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。
JDBC 存在上面的这些问题,那么我们在项目实践中就要规避这些问题,下面我们看一下 MyBais 框架。
三、什么是MyBatis
3.1、ORM框架
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
简单的说:就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
数据库 | 实体类 |
---|---|
user 表 |
User 类 |
id 列 |
id 属性 |
username 列 |
userName 属性 |
age 列 |
age 属性 |
3.2、持久层框架
持久化框架(英语: persistence framework )是一种中间件,可协助并自动将程序数据存储到数据库(尤其是关系数据库)中。它作为应用程序和数据库之间的一个抽象层,通常弥合两者之间的任何概念差异。
许多持久性框架也是对象关系映射( ORM )工具(例如: Hibernate , MyBatis )。此类框架将应用程序域中的对象映射到需要在数据库中持久化的数据。可以使用 XML 文件或元数据注释来定义映射。
简单的说:就是封装了 JDBC ,处于应用程序和数据库之间,完成应用程序对数据库的操作。
3.3、MyBatis概述
MyBatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC ,采用 ORM 思想解决了实体和数据库映射的问题,对 JDBC 进行了封装,屏蔽了底层访问细节,使我们不用与 JDBC API 打交道,使开发者只需要关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
MyBatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 Java 对象和 statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句,最后由 MyBatis 框架执行 SQL 并将结果映射为 Java 对象并返回,简化了对数据库的操作。
简单的说: MyBatis 是一个持久层框架,解决了 JDBC 代码冗余,开发效率底下的问题,简化了对数据库的操作。
微信公众号:CodeAction
Github:https://github.com/codeaction