前言:前面已经学习了Spring,Spring Boot,Spring MVC这3个框架,接下来学习第4个框架MyBatis(国内):将前端传递的数据存储起来(前身IBatis)或者查询数据库里面的数据。
PS:不同版本号区别
3.5.1 -> 3.5的第一个版本
3.5.10 -> 3.5的第十个版本
org -> 开源框架域名(非盈利性的公益组织)
1.MyBatis是什么?
MyBatis是一款优秀的持久层框架(ORM框架),它支持自定义SQL,存储过程(以程序里写方法的方式来写SQL,问题:无法一步步调试。企业里几乎不用)以及高级映射。MyBatis去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型,接口和JavaPOJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。
简单来说MyBatis是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具/框架。
MyBatis支持的操作方式:
①3.1版本之前:支持XML的操作方式(主流90%企业在用)自由度灵活度大;
②3.1版本之后:使用注解实现数据库的操作(企业里几乎不用)实现特殊业务时会非常复杂。
2.为什么要学习MyBatis?
对于后端开发来说,程序是由①后端程序②数据库这两部分组成的。
而这两部分要通讯,就要依赖数据库连接工具(有JDBC,MyBatis)。
JDBC操作流程:
创建数据库连接池DataSource。
通过DataSource获取数据库连接Connection。
编写要执行带 ? 占位符的 SQL 语句。
通过 Connection 及 SQL 创建操作命令对象 Statement。
替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值。
使用 Statement 执行 SQL 语句。
查询操作:返回结果集 ResultSet,更新操作:返回更新的数量。
处理结果集。
释放资源。
JDBC 操作示例回顾:通过 JDBC 的 API 向数据库中添加⼀条记录,修改⼀条记录,查询⼀条记
录:
-- 创建数据库
create database if not exists `library` default character set utf8mb4;
-- 使⽤数据库
use library;
-- 创建表
create table if not exists `soft_bookrack` (
`book_name` varchar(32) NOT NULL,
`book_author` varchar(32) NOT NULL,
`book_isbn` varchar(32) NOT NULL primary key
) ;
以下是 JDBC 操作的具体实现代码:
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SimpleJdbcOperation {
private final DataSource dataSource;
public SimpleJdbcOperation(DataSource dataSource) {
this.dataSource = dataSource;
}
/**
* 添加⼀本书
*/
public void addBook() {
Connection connection = null;
PreparedStatement stmt = null;
try {
//获取数据库连接
connection = dataSource.getConnection();
//创建语句
stmt = connection.prepareStatement(
"insert into soft_bookrack (book_name, book_author,
book_isbn) values (?,?,?);"
);
//参数绑定
stmt.setString(1, "Spring in Action");
stmt.setString(2, "Craig Walls");
stmt.setString(3, "9787115417305");
//执⾏语句
stmt.execute();
} catch (SQLException e) {
//处理异常信息
} finally {
//清理资源
try {
if (stmt != null) {
stmt.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
//
}
}
}
/**
* 更新⼀本书
*/
public void updateBook() {
Connection connection = null;
PreparedStatement stmt = null;
try {
//获取数据库连接
connection = dataSource.getConnection();
//创建语句
stmt = connection.prepareStatement("update soft_bookrack set book_author=? where book_isbn=?;"
);
//参数绑定
stmt.setString(1, "张卫滨");
stmt.setString(2, "9787115417305");
//执⾏语句
stmt.execute();
} catch (SQLException e) {
//处理异常信息
} finally {
//清理资源
try {
if (stmt != null) {
stmt.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
//
}
}
}
/**
* 查询⼀本书
*/
public void queryBook() {
Connection connection = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Book book = null;
try {
//获取数据库连接
connection = dataSource.getConnection();
//创建语句
stmt = connection.prepareStatement("select book_name, book_author, book_isbn from
soft_bookrack where book_isbn =?"
);
//参数绑定
stmt.setString(1, "9787115417305");
//执⾏语句
rs = stmt.executeQuery();
if (rs.next()) {
book = new Book();
book.setName(rs.getString("book_name"));
book.setAuthor(rs.getString("book_author"));
book.setIsbn(rs.getString("book_isbn"));
}
System.out.println(book);
} catch (SQLException e) {
//处理异常信息
} finally {
//清理资源
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
//
}
}
}
public static class Book {
private String name;
private String author;
private String isbn;
//省略 setter getter ⽅法
}
}
从上述代码和操作流程可以看出,对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写。于是我们就想,那有没有⼀种⽅法,可以更简单、更⽅便的操作数据库呢?
答案是肯定的,这就是我们要学习 MyBatis 的真正原因,它可以帮助我们更⽅便、更快速的操作数据库。
3.怎么学MyBatis?
MyBatis 学习只分为两部分:配置 MyBatis 开发环境;使⽤ MyBatis 模式和语法操作数据库。