mybatis -1:羡慕包立春的肥肠

215 阅读4分钟

​啊呸.... 抖音真有毒,刷完【蜀中桃子姐】,看着包立春春风满面的样子,羡慕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个问题,我下次更新。