myabtis源码解析四(mybatis中statement对象的创建)

myabtis源码解析四(mybatis中statement对象的创建),第1张

上一期,我们分析了sql语句的创建过程,接下来,咱们进入到下一个特别重要的对象创建,statement对象的创建

StatementHandler 是一个非常核心接口,不仅要创建合适statement对象,再将参数放到statement对象中,执行sql,处理结果集.可以说这些步骤都是在statementHandle中

实现的,接下来咱们跟着源码一起来分析,还是以查询为例,接着上期的selectOne分析

再来看一下statement的uml图

接下来,我们需要设置参数到sql中了,JDBC 提供了三种 Statement 接口,分别是 Statement、PreparedStatement 和 CallableStatement。他们的uml图为:

statement:提供执行的sql语句

PreparedStatement:对输入参数执行动态替换,也就是将之前的?替换为具体的参数

CallableStatement:用于保存存储过程输出的结果

我们来来分析PreparedStatement

statement创建就是这样,重点看下参数是怎样设置进去的

我们来执行一条根据主键查询的sql语句,然后debug运行,看看参数如何设置进去的

每一个?都会在parameterMappings集合中生成一个对象属性,执行完之后,一条正正的sql就形成了

当我们执行完sql后就要开始处理查询结果了结果集的处理工作由结果集处理器 ResultSetHandler 执行。ResultSetHandler 是一个接口,它只有一个实现类 DefaultResultSetHandler。结果集的处理入口方法是 handleResultSets,下面来看一下该方法的实现。

这里注意啊一下,resultHandle是一个接口,我们可以实现自己的类,用来自定义结果集,map,list等等

对于支持自动生成主键的数据库(如SQL

Server),可以采用以下方式:

<insert

id="xxx"

parameterType="yyy"

useGeneratedKeys="true"

keyProperty="id">

....

</insert>

对于不支持自动生成主键(如Oracle),可以采用以下方式:

<insert

id="xxx"

parameterType="yyy">

<selectKey

keyProperty="id"

resultType="long"

order="BEFORE">

select

my_seq.nextval

from

dual

</selectKey>

....

</insert>


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11555366.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存