美文网首页
01-Mybatis源码

01-Mybatis源码

作者: 安然在路上 | 来源:发表于2021-01-30 16:52 被阅读0次

当我看到一线大厂的起薪是25k,而我这种5年开发经验的大龄菜鸟用什么去换那25K呢。巨大的焦虑袭来,所以抓住了拉钩教育的高薪训练营这根救命稻草,是的,我太需要帮助了。
2021年1月20号开的班,开此系列记录一下很懒又经常做很多无用功的我的成长之路~

写在前面的话

言归正传,mybatis和其他ORM框架一样,是对jdbc的封装,那么先回顾一下最最开始的jdbc:

1.加载JDBC驱动程序
DriverManager dm = Class.forName("com.mysql.jdbc.Driver") ;

  1. 创建数据库的连接
    Connection con = DriverManager.getConnection(url , username , password ) ;
  2. 创建一个preparedStatement 、设置参数
    PreparedStatement pstmt = con.prepareStatement(sql) ;
  3. 执行SQL语句
    ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
    int rows = stmt.executeUpdate("INSERT INTO ...") ;
  4. 遍历结果集
  5. 释放资源

问题:

  • 频繁创建、释放连接浪费系统资源
  • sql语句在代码中硬编码
  • 解析结果集时有硬编码等

优化措施:
连接池、sql语句提取到xml中、使用反射和内省将实体和表进行属性与字段的自动映射。

自定义框架设计

使用端:

  1. 数据源配置信息
    xml可以,properties文件也可以
  2. sql语句信息:Mapper.xml

框架端:

  1. 读取配置文件
  2. 解析配置文件
    Configuration用组合的方式放到其他对象中一层层传递
    MappedStatement :sql语句、入参出参
  3. 创建SqlSessionFactory
  4. 创建sqlSession接口和实现类:主要封装CRUD方法
    具体实现:封装jdbc,完成对数据库表的查询操作

感觉创建sqlSession的那块代码逻辑有点复杂,插入一点mybatis里的东西:

sqlSession实例在Mybatis中非常强大,有所有的执行语句、提交或回滚事务。有多种SQLSession才有SqlSessionFactory存在的意义。 SqlSessionFactory的openSession方法

涉及的设计模式:
build建造者模式、工厂模式、代理模式

Mybatis

1. Mapper接口开发:

  • Mapper.xml文件中的namespace与mapper接口的全限定名相同
  • Mapper接口方法名和Mapper。xml中定义的statement中的id相同
  • Mapper.xml中的入参出参和类型相同

2. 动态sql

  • foreach


    foreach

    注意:collection可以写list、array等

  • sql片段抽取
    sql片段抽取
    3.mybatis缓存
    一级缓存也叫查询缓存,默认开启,基于sqlSession,一级缓存是缓存对象。
    一级缓存

二级缓存需要手动开启,但在分布式环境下使用默认的二级缓存会产生脏读。二级缓存和sqlSession无关,在namespace级别配置,二级缓存是缓存数据,会重新生成一个对象,所以对象需要实现Serialable接口。二级缓存整合redis可以解决分布式环境下的脏读问题。


二级缓存

相关文章

  • 01-Mybatis源码

    当我看到一线大厂的起薪是25k,而我这种5年开发经验的大龄菜鸟用什么去换那25K呢。巨大的焦虑袭来,所以抓住了拉钩...

  • iOS-OC相关源码下载和OC代码转C++/汇编/LVVM

    目录 OC相关源码下载----objc源码----malloc源码----Runloop源码----GCD源码OC...

  • go run

    源码文件 Golang源码文件分为三种类型,分别是命令源码文件、库源码文件、测试源码文件 命令源码文件 命令源码文...

  • 文章目录汇总

    Java 源码 String源码-Java源码系列之StringInteger、Long源码-Java源码系列之I...

  • 小米便签产品级的源码

    小米便签产品级的源码 源码简介 小米便签Android源码,可以再桌面创建widget。 源码截图 源码下载 源码下载

  • 命令源码文件

    包是有源码文件组成,源码文件分为三种,库源码文件,命令源码文件,测试源码文件 命令源码文件 定义:命令源码文件是程...

  • @@程序员——看完源码记不住?掌握这套方法,Alibaba不会少

    都说大厂面试必问源码,可很多人看完MMKV 源码、Handler 源码、Binder 源码、OkHttp 源码等源...

  • 【Tip】Go语言学习:命令源码文件

    源码文件组织形式 Go语言以代码包的形式组织源码文件。有三种类型的源码文件:命令源码、库源码和测试源码。命令源码即...

  • 源码学习之Mybatis

    Mybatis源码解读 1 源码下载 学习源码之前需要先将源码下载下来,这里需要下载mybatis源码和mybat...

  • HashMap源码

    HashMap的源码,基于jdk1.7Map的源码 AbstractMap的源码 HashMap的源码

网友评论

      本文标题:01-Mybatis源码

      本文链接:https://www.haomeiwen.com/subject/jfzhtltx.html