JDBC执行过程回顾与MyBatis执行过程

1、JDBC执行过程回顾

在这里插入图片描述
1)获取Connection连接
2)预编译SQL
3)执行SQL
4)读取结果

1.2、预编译的三种执行器

在这里插入图片描述
三种执行器都支持批处理
在这里插入图片描述
1)Mysql不支持(setFetchSize)设置一次性读取多少行。
2)addBatch批量操作,将多个SQL合并在一起,最后调executeBatch一起发送至数据库执行。
3)setFetchSize设置从数据库每次读取的数量单位。该举措是为了防止一次性从数据库加载数据过多,导致内存溢出。

1.3、关于防止SQL注入问题

在这里插入图片描述
1)简单执行器(Statement)存在sql注入问题,发送一条一条静态sql语句(包含参数)传输体量比较大。
2)预处理执行器(PreparedStatement)可以防止sql注入问题,发送一条sql语句包含若干组参数传输体量比较小。
3)预处理执行器是通过参数转义来防止sql注入问题的,参数转义是在数据库层面进行的而不是应用程序做的。

1.4、简单执行器与预处理执行器的区别

1)简单执行器(Statement)

  • 执行静态sql存在sql注入问题,不需要设置参数。
  • 相同的sql查询参数不同时会组装成不同参数的多条静态sql进行多次发送,从而多次编译多次执行。

2)预处理执行器(PreparedStatement)

  • 执行动态sql可以防止sql注入问题,需要设置预编译参数。
  • 相同的sql查询参数不同时会组装成一条动态sql,多组不同参数进行发送,从而一次编译多次执行。

2、MyBatis执行过程

在这里插入图片描述
Statement----声明
Handler------处理器
Executor-----执行者,执行器

  • 会话SqlSession关闭所有涉及的执行器、声明处理器都会销毁。
  • 在一次会话中,SqlSession、Executor、StatementHandler的比例关系:
    SqlSession:Executor:StatementHandler=1:1:n
    这里的1:1:n指的是一个事务。
  • 一个会话可以启动多个事务
  • 以上所有的组件都不是线程安全的,不能跨线程使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值