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

MyBatis原理解读

我们项目中多用MyBatis进行数据库的读写,开源的MyBatis-Plus框架对其进行了增强,使用上更加简单,我们之前的很多项目也是直接用的MyBatis-Plus。

数据库操作的时候,简单的单表读写,我们可以直接在方法里链式组装SQL,复杂的SQL或涉及多表联合join的,需要在xml手写SQL语句。

MyBatis是对JDBC的封装,所以执行流程跟原生JDBC操作数据库一样,都有获取数据库连接、组装SQL、执行这些步骤。一个SQL执行就是一次SqlSession,在实现上,由SqlSessionFactoryBuilder通过建造者模式去创建SqlSessionFactory工厂,在SqlSessionManager管理器可以看到通过JDK动态代理去创建SqlSession,每个线程当前的SqlSession维护在ThreadLocal。
在这里插入图片描述
SqlSessionInterceptor本身实现了InvocationHandler,也是代理模式去执行SQL,根据执行中的异常情况,判断是提交或回滚。

    private class SqlSessionInterceptor implements InvocationHandler {public SqlSessionInterceptor() {}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {SqlSession sqlSession = (SqlSession)SqlSessionManager.this.localSqlSession.get();if (sqlSession != null) {try {return method.invoke(sqlSession, args);} catch (Throwable var19) {throw ExceptionUtil.unwrapThrowable(var19);}} else {SqlSession autoSqlSession = SqlSessionManager.this.openSession();Throwable var6 = null;Object var8;try 
http://www.lryc.cn/news/261713.html

相关文章:

  • Linux---文本搜索命令
  • Unity中Shader语义的理解
  • Flink系列之:Top-N
  • CSS的三大特性(层叠性、继承性、优先级---------很重要)
  • 飞天使-docker知识点10-docker总结
  • 旅游管理虚拟情景实训教学系统演示
  • Linux Shell——输入输出命令详解
  • MFC 第一个窗口程序
  • SQL语句的执行顺序怎么理解?
  • js解析.shp文件
  • 关于“Python”的核心知识点整理大全25
  • 代码随想录刷题题Day15
  • 软件设计师——信息安全(一)
  • git必须掌握:git远程变动怎么解决
  • Python里的时间模块
  • SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测
  • C#学习相关系列之自定义遍历器
  • WPS没保存关闭了怎么恢复数据?3个方法,完成数据恢复!
  • 数据结构和算法-最小生成树(prim和krusakal)和最短路径问题(BFS和dijkastra和floyd)
  • 响应者链概述
  • ShenYu网关Http服务探活解析
  • 基于dockerfile搭建LNMP
  • 基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(三)
  • springMVC-@RequestMapping
  • 智能优化算法应用:基于树种算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • web前端项目-影视网站开发
  • QT:Unable to create a debugging engine.
  • 如何理解Rust语言中的“impl”关键字
  • C++实现简单的猜数字小游戏
  • 人工智能导论复习资料