01-Mybatis源码

2021-01-30  本文已影响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语句提取到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接口开发:

2. 动态sql

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


二级缓存
上一篇 下一篇

猜你喜欢

热点阅读