SSM-MyBatis-07:Mybatis中SqlSession的insert和delete底层到底做了什么
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
先点进去看一下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是复位,重置,
初始化的意思
最新文章
- @Autowired注解的使用
- socket入门基础
- Java多线程19:定时器Timer
- .net混淆、反编译工具调查
- matlab求解二元一次方程组的解得表达式
- wp8.1 Study16:网络之 使用Azure移动服务及利用Azure推送通知服务
- XsdGen:通过自定义Attribute与反射自动生成XSD
- js生成有缩进的表格
- Java集合框架学习笔记
- 2014年9月21日_随笔,jdic,ETL,groovy,Nutz好多东西想学
- div背景等比例缩小
- HelloWorld改编,仿bilibili手机端(一)——侧滑菜单界面布局
- 新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo
- loadrunner / socket level data and wininet level data
- Android开发——RecyclerView特性以及基本使用方法(一)
- 【linux kernel】 中断处理-中断上半部【转】
- 获取linux工具命令源码
- js中常见的创建对象的方法
- Java虚拟机执行引擎
- curl命令(测试连接命令)
热门文章
- Process Order API - How To Scripts
- How to Simulate the Price Order or Price Line Function using API QP_PREQ_PUB.PRICE_REQUEST Includes
- java工具类(七)实现给定任意年份和月份得出天数
- 嵌入式C语言位运算之清位置位
- PS图像特效算法——百叶窗
- 收集一些dos网络配置命令,从新获取ip刷新dns
- The content of elements must consist of well-formed character data or markup
- android 应用模式之mvp
- onDraw(canvas)和dispatchDraw(canvas)方法
- ruby写一个文件内容相似性比较的代码