前言
这篇文章我们一起走进MyBatis世界,熟悉MyBatis
1.1 楔子(铺垫)
学习 MyBatis 之前,我们可以通过从查看原来使用JDBC 操作持久层的代码,再次重温一下 JDBC 的噩梦。
1. 1. 1 JDBC编程
保存操作:
public int addActor(Actor actor) {
conn=this.getConnection();
PreparedStatement ps=null;
int count=0;
try {
String sql="INSERT INTO actor VALUES(DEFAULT,?,?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, actor.getAname());
ps.setString(2, actor.getAbrief());
ps.setString(3, actor.getAimage());
count=ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
closeAll(conn, ps, null);
}
return count;
}
查询操作:
public Movice getJieAndImage(int id) {
conn=this.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
Movice movice=null;
try {
String sql="SELECT * FROM movice where mvid=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, id);
rs=ps.executeQuery();
while (rs.next()) {
movice=new Movice(rs.getInt("mvid"),rs.getString("mname"),rs.getString("mbrief"),rs.getString("mpianChang"),rs.getInt("director"),rs.getInt("actor"),rs.getString("mShangTime"),rs.getInt("mtype"),rs.getInt("mregion"),rs.getString("mImage"),rs.getFloat("grade"),rs.getFloat("mPrice"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
closeAll(conn, ps, rs);
}
return movice;
}
1. 1. 2 框架
什么是框架,框架从何而来,为什么使用框架?
框架(framework):
- 是一系列 jar 包,其本质是对 JDK 功能的拓展。
- 框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一个领域的问题。
1. 1. 3 最佳实践
最佳实践(Best Practice):
实际上是无数程序员经历过无数次尝试之后,总结出来的处理特定问题的特定方法。
如果把程序员的自由发挥看作是一条通往成功的途径,最佳实践就是其中的最短路径,能极大的解放生产力。Web 开发中的最佳实践:根据职责的纵向划分:控制层、业务层、持久层:
- 控制层 :web/mvc: 负责处理与界面交互的相关操作 (Struts2/Spring MVC)
- 业务层 :service: 负责复杂的业务逻辑计算和判断 (Spring)
- 持久层 :dao: 负责将业务逻辑数据进行持久化存储 (MyBatis/Hibernate)
1. 2 ORM 思想
对象关系映射(Object Relational Mapping,简称 ORM):
- 是一种为了解决面向对象与关系数据库存在的互不匹配的问题的技术。
- 简单的说,ORM 是通过使用描述对象和数据库之间映射的元素,将 Java 程序中的对象自动持久化到关系数据库中。
ORM 主要解决对象 - 关系的映射:
-
O(对象模型):实体对象,即我们在程序中根据数据库表结构建立的一个个实体Entity。
-
R(关系型数据库的数据结构):即我们建立的数据库表。
-
M(映射):从R(数据库)到O(对象模型)的映射,可通过XML文件映射。
1. 2 . 3 常见 ORM 框架
把对象数据库的操作封装成一套 API,具有操作数据库的增删改查等操作,而且具有独立性,当持久层技术层发生改变时,不用修改任何业务层代码。
- JPA:本身是一种 ORM 规范,不是 ORM 框架。由各大 ORM 框架提供实现。
- Hibernate:目前最流行的 ORM 框架。设计灵巧,性能优秀,文档丰富。
- MyBatis 目前最受欢迎的持久层解决方案。
1 . 3 MyBatis 概述
1.3.1.认识 MyBatis
- MyBatis 是支持普通 SQL 查询,存储过程和高级映射的持久层框架,严格上说应该是一个 SQL 映射框架。其前身是 iBatis,也就是淘宝使用的持久层框架,而这只需要简单的使用 XML 或注解配置就可以完成。
- 几乎所有的 JDBC 代码和参数的手工设置以及结果集的处理都可以交给 MyBatis 完成
- 和 Hibernate 相比更简单、更底层、性能更优异,因此更深入人心,更受企业的青睐。
- GitHub 地址为 https://github.com/mybatis
1.3. 2 包括了 MyBatis 很多子项目:
- mybatis-3:MyBatis 框架
- generator:代码生成器
- spring:MyBatis 和 Spring 集成的组件
- spring-boot-starter:MyBatis 和 Spring Boot 集成的组件
- mybatipse:MyBatis 的 Eclipse 插件
1.3. 3 中文文档:
1.3. 4 MyBatis 架构图
1.3. 5 MyBatis 核心组件
- SqlSessionFactoryBuilder(构建器):根据配置信息或 Java 代码来构建 SqlSessionFactory 对象。
作用:创建 SqlSessionFactory 对象。 - SqlSessionFactory(会话工厂):好比是 DataSource,线程安全的,在应用运行期间不要重复创建多次,
建议使用单例模式。
作用:创建 SqlSession 对象 - SqlSession(会话):好比是 Connection,线程不安全的,每次使用开启新的 SqlSession 对象,使用完毕正常关闭,默认使用 DefaultSqlSession。提供操作数据库的增删改查方法,可以调用操作方法,也可以操作 Mapper 组件。
作用:操作数据库 - Executor(执行器):
SqlSession 本身不能直接操作数据库,需要 Executor 来完成,该接口有两个实现:缓存执行器(缺省)、基本执行器。 - MappedStatement:映射语句封装执行语句时的信息如 SQL、输入参数、输出结果。
1.3.6 MyBatis 原理图
更具体的底层原理图:
涉及到的对象讲解:
- SqlSession:表示和数据库交互的会话,完成必要数据库增删改查功能。
- Executor:执行器,是 MyBatis 调度的核心,负责 SQL 语句的生成和查询缓存的维护。
- StatementHandler:语句处理器,封装了 JDBC 的 DML、DQL 操作、参数设置。
- ParameterHandler:参数处理器,把用户传入参数转换为 JDBC 需要的参数值。
- ResultSetHandler:结果集处理器,把结果集中的数据封装到 List 集合。
- TypeHandler:类型转换器,Java 类型和 JDBC 类型的相互转换。
- MappedStatement:映射语句对象,维护了一条<insert|update|delete|select>节点的封装
- SqlSource:SQL 源,根据用户传入的参数生成 SQL 语句,并封装到 BoundSql 中。
- BoundSql:SQL 绑定,封装 SQL 语句和对应的参数信息。
- Configuration:MyBatis 全局配置对象,封装所有配置信息。
总结
这篇博文主要让我们了解MyBatis,了解即可,重点在后面的文章中。