当前位置: 首页 > news >正文

【社区图书馆】关于Mybatis原理学习的读后感

1、为什么会看原理书籍

        Mybatis是我们Java后端开发中的主流ORM框架,基本都会在工作中用到。所以,是既熟悉,又陌生。熟悉是因为一直都在使用,而陌生则是对于其内部原理还不够深入。刚好近期的工作中,又遇到了一个需求,需要利用mybatis框架做一些输出任务,因此正好看一看,进一步了解一下其根本,好做出相应的对策。


2、学习之后的一些感受

首先,mybatis有以下核心组件:

Configuration:Mybatis所有的配置信息都维持在Configuration 对象之中
SqlSession:作为Mybatis 工作的主要顶层API,表示和数据库交互的会话,完成数据库增删查改功能
Executor:Mybatis 执行器,是Mybatis 调度的核心,负责SQL
StatementHandler:封装了JDBC Statement 操作,负责对JDBC statement 的操作,如设置参数,将 Statement 结果集转换为List 集合
ParameterHandler:负责对用户传递的参数转换为JDBC Statement 所需要的参数
ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换为List 类型的集合
MappedStatement:MappedStatement主要维护各个加载的sql语句的配置信息、映射关系等等
MapperProxy、MapperProxyFactory:Mapper 代理,使用原生的Proxy 执行mapper 里的方法

其次,执行过程有:

1、从mybatis-config.xml读取全局配置文件,用于配置数据库连接、属性、类型别名、类型处理器、插件、环境配置、映射器(mapper.xml)等信息,这个过程中有一个比较重要的部分就是映射文件其实是配在这里的;这个核心配置文件最终会被封装成一个Configuration对象
2、加载SQL映射文件,该文件中配置了操作数据库的SQL语句,映射文件是在mybatis-config.xml中加载;可以加载多个映射文件。常见的配置的方式有两种,一种是package扫描包,一种是mapper找到配置文件的位置。
3、用建造者设计模式使用SqlSessionFactoryBuilder对象构建的,SqlSessionFactory的最佳作用域是应用作用域。
4、由会话工厂创建SqlSession对象,对象中包含了执行SQL语句的所有方法,每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域,并把执行器放进SqlSession中。
5、通过Executor执行器,负责SQL语句的生成和查询缓存的维护,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
6、通过MappedStatement对解析的SQL的语句封装,一个MappedStatement代表了一个sql语句标签。
7、输入参数类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型,这个过程类似于JDBC的预编译处理参数的过程,有两个属性 parameterType和parameterMap。再封装结果集,可以是Map、List、POJO类型复杂数据类型。封装结果集的过程就和JDBC封装结果集是一样的。也有两个常用的属性resultType和resultMap。

http://www.lryc.cn/news/61736.html

相关文章:

  • C++ Primer阅读笔记--表达式和运算符的使用
  • npm install xxx的执行过程及示例
  • excel数据分析比赛
  • Git使用GitHub说明
  • 这些不可不知的JVM知识
  • 基于RK3568的Linux驱动开发——GPIO知识点(一)
  • 5.2.1二叉树的定义和基本术语
  • 动态组件、keep-alive的使用及自定义指令
  • 基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现
  • 问题排查记录-ffmpeg链接libavfilter和libavcodec:未定义的引用
  • 打印流,Properties类
  • TinyOS 配置教程
  • 【工作总结】后端开发人员的坏习惯
  • review
  • 【人工智能概论】 用Python实现数据的归一化
  • 【Python】matplotlib设置图片边缘距离和plt.lengend图例放在图像的外侧
  • oracle 11g等保加固
  • 【设计模式】设计模式之解释器模式
  • leetcode551. 学生出勤记录 I
  • flume拦截器介绍
  • 5.4、服务器编程基本框架和两种高效的事件处理模式
  • Flink主要有两种基础类型的状态:operator state。
  • 【vue2】使用vue-admin-template动态添加路由的思路/addRoutes的使用
  • Python语言中的注释方法应用
  • Google浏览器翻译无法正常使用解决
  • ETCD(三)操作指令
  • 小白学Pytorch系列--Torch.optim API Base class(1)
  • flac格式如何转mp3,3招帮你搞定
  • Redis入门到入土(day01)
  • JVM垃圾回收GC 详解(java1.8)