------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

先点进去看一下insert方法

用ctrl加鼠标左键点进去看

  发现是一个接口SqlSession的方法,没有实现 ,但是通过里氏替换原则的想法,他是接口接收了实现类,所以找他的实现类DefaultSqlSession(idea快捷键ctrl+H)

  进去后用ctrl+F查找insert,可以看到多个insert方法构成的重载,但是他们的方法实现调用了这个

public int insert(String statement) {
return this.insert(statement, (Object)null);
} public int insert(String statement, Object parameter) {
return this.update(statement, parameter);
}

  上面那个方法调用了下面的方法,下面insert方法确实调用了update方法

再看一下delete的方法,

  他和insert类似,都是接口SqlSession的方法,所以还是找他的实现类DefalutSqlSession

  进去之后继续寻找delete方法

public int delete(String statement) {
return this.update(statement, (Object)null);
} public int delete(String statement, Object parameter) {
return this.update(statement, parameter);
}

  可以看出他也是调用了update方法,所以就引发了好奇,update带俩个参数的那个方法中有什么?为什么都调用它呢?

看一下update方法

public int update(String statement, Object parameter) {
int var4;
try {
this.dirty = true;
MappedStatement e = this.configuration.getMappedStatement(statement);
var4 = this.executor.update(e, this.wrapCollection(parameter));
} catch (Exception var8) {
throw ExceptionFactory.wrapException("Error updating database. Cause: " + var8, var8);
} finally {
ErrorContext.instance().reset();
} return var4;
}

  这里简单的提一下,

    1)dirty=true;代表了他已经成为脏数据,意思就是内存上的数据和数据库中不一致,为什么这儿会改,或许就要谈论到为什么增删改需要手动提交事务(session.commit())和

      session.close为什么会造成事物的回滚,可能下几章博客会有简单刨析一下

    2)MappedStatement这个我找了一些资料,但是从百度搜索的没有告诉明白这个是什么东西,简单的说一下,如果错误,请大家帮我指出来,它应该是获取到mybatis配置中的具体SQL

    3)var4就是用执行器执行sql,接收返回值,由update返回值是int,并且是var4,可以推断出他应该是返回受影响的行数

    4)ErrorContext从字面意思理解为错误的上下文,instance是实例的意思,他源码是通过静态方法,拿到ErrorContext对象实例或创建实例并返回回来,单例的写法,reset是复位,重置,

    初始化的意思

最新文章

  1. @Autowired注解的使用
  2. socket入门基础
  3. Java多线程19:定时器Timer
  4. .net混淆、反编译工具调查
  5. matlab求解二元一次方程组的解得表达式
  6. wp8.1 Study16:网络之 使用Azure移动服务及利用Azure推送通知服务
  7. XsdGen:通过自定义Attribute与反射自动生成XSD
  8. js生成有缩进的表格
  9. Java集合框架学习笔记
  10. 2014年9月21日_随笔,jdic,ETL,groovy,Nutz好多东西想学
  11. div背景等比例缩小
  12. HelloWorld改编,仿bilibili手机端(一)——侧滑菜单界面布局
  13. 新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo
  14. loadrunner / socket level data and wininet level data
  15. Android开发——RecyclerView特性以及基本使用方法(一)
  16. 【linux kernel】 中断处理-中断上半部【转】
  17. 获取linux工具命令源码
  18. js中常见的创建对象的方法
  19. Java虚拟机执行引擎
  20. curl命令(测试连接命令)

热门文章

  1. Process Order API - How To Scripts
  2. How to Simulate the Price Order or Price Line Function using API QP_PREQ_PUB.PRICE_REQUEST Includes
  3. java工具类(七)实现给定任意年份和月份得出天数
  4. 嵌入式C语言位运算之清位置位
  5. PS图像特效算法——百叶窗
  6. 收集一些dos网络配置命令,从新获取ip刷新dns
  7. The content of elements must consist of well-formed character data or markup
  8. android 应用模式之mvp
  9. onDraw(canvas)和dispatchDraw(canvas)方法
  10. ruby写一个文件内容相似性比较的代码