啊呸.... 抖音真有毒,刷完【蜀中桃子姐】,看着包立春春风满面的样子,羡慕ing....。洗把脸,已经是凌晨12点了,等今晚上完线,回去我也搞个猪大肠。
测试妹纸阿恒还在疯狂F5....,看着自己为数不多的头发,伤心两分钟。
趁有空,整理下自己的知识体系。刚好今天有php同事问到mybatis的实现过程(ps:创业公司一般都是php开始,嗯~~,php是世界上最好的语言),那就先从它开始吧。java三剑客之一,mybatis。
了解mybatis,之前我们先了解下两个相关的知识点 JDBC -> ORM
一、JDBC简介 JDBC是Java与数据库交互的统一API。
传统的JDBC编程的操作步骤如下例子
public static void main(String[] args) {
String driveName = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/mybatis-study?serverTimezone=GMT%2B8";
String user = "root";
String pass = "root";
Connection con = null;
Statement state = null;
ResultSet result = null;
try {
// 1、装载Mysql驱动
Class.forName(driveName);
// 2、获取连接
con = DriverManager.getConnection(url, user, pass);
// 3、创建Statement
state = con.createStatement();
// 4、构建SQL语句
String stuQuerySqlStr = "select * from order_base";
// 5、执行SQL返回结果
result = state.executeQuery(stuQuerySqlStr);
// 6、对SQL返回结果解析
while (result.next()) {
log.info(" >>> 订单编号 :: {}", result.getString("order_no"));
log.info(" >>> 订单归属 :: {}", result.getLong("user_id"));
}
} finally {
//7、关闭ResultSet、Statement对象以及数据库连接,释放相关资源
result.close();
state.close();
con.close();
}
JDBC架构图:
JDBC API提供了以下接口和类: DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。
Driver: 此接口处理与数据库服务器通信。很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息
Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。
Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据。
SQLException: 这个类用于处理发生在数据库应用程序中的任何错误。
二、ORM框架 对象-关系映射(OBJECT/RELATIONALMAPPING,简称ORM),是随着面向对象的软件开发方法发展而产生的。用来把对象模型表示的对象映射到基于SQL 的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQL 语句打交道,只需简单的操作实体对象的属性和方法 。
三、mybatis
mybatis 是一款优秀的 ORM(持久层)框架,使用 Java 语言 编写,前身是 apache 的一个开源项目 iBatis,2010 年迁移到 google code 并正式改名为 mybatis。 在没有持久层框架之前, 想要代码中操作数据库都必须通过 jdbc 来操作, 在上面jdbc的介绍中有代码示例。 直接使用JDBC,存在的工作量或问题,主要有:
1、需要开发人员自己维护Connection数据库连接。
2、事务需要自己实现。
3、需要手动写sql语句,工作量大,繁琐;难于调试,经常会出现sql多一个单引号等引发的sql语法问题;且不同的sql语句需要重新调试。
4、手动编写代码设置参数,如:stmt.setString(2,"aaa");。
4、手动将查询结果拼装成Javabean对象返回。spring的JdbcTemplate也存在这个问题。
Mybatis 针对 JDBC 中重复操作做了封装, 同时扩展并优化部分功能
mybait的架构图:
简单的梳理了下mybatis相关知识点。实际在项目中使用mybaits主要的疑问我整理了几个,
1、mapper接口没有实现类,是如何执行的
2、使用default与在xml中写sql为什么都能执行
3、Mapper中方法名称与xml中id与namespace配置的意义
4、Mapper.xml文件放在package中与配置文件中都可以的原因
5、为什么说mybatis一级缓存是Sqlsession级别的,二级缓存是mapper(namespace)级别的
6、mybatis添加二级缓存的方式与实现原理
7、mybatis中的执行器Excutor
8、mybatis中是如何整合第三方日志框架的
9、mybatis中sql日志打印是如何实现的
10、mybatis中的使用的设计模式
阿恒找我看bug了,先整理到这,上面的10个问题,我下次更新。