Mybatis|SqlSession四大对象(二)

Mybatis|SqlSession四大对象(二),第1张

参数处理器负责为ParameterHandler的sql语句参数动态赋值。

这个接口中只有两个方法:

getParameterObject 方法用于读取参数

setParameters用于对ParameterHandler的参数赋值。

参数处理器对象时在创建StatementHandler对象时同时被创建的,由configuration对象负责创建。

创建时传入三个对象:mappedStatement(执行SQL对应的配置信息)、parameterObject、boundSql。

注意:一个BoundSql对象,代表了SQL语句的一次执行,而SqlSource对象的责任就是根据传入的参数对象动态计算出这个BoundSql,也就是说Mapper文件中的节点的计算是由SqlSource对象完成的。SqlSource最常用是实现类是DynamicSqlSource。

看看上述的实参10是如何添加到对应的SQL语句中的

在MyBatis中,使用动态代理模式,当dao.findByDeptNo(10)将要执行的时候,会被JVM进行拦截交给MyBatis中的代理实现类MapperProxy中的invoke方法。

最后交给ParameterHandler中setParameter方法,将参数交给对应占位符。

读取ParameterObject参数对象,然后用typeHandler对参数进行设置,而typeHandler里面需要对jdbcType和javaType进行处理,设置参数。所以使用TypeHandler的时候完全可以控制如何设置SQL参数。

ResultSetHandler接口主要负责两件事:

你需要了解sql语句的拼接和一般字符串的拼接的异同.

例如:在sql脚本语句中,字符串用单引号'',这些在C#语句中拼接"sql语句"字符串时需要注意.

你可以在vs.net中写一个用字符串拼接的sql语句,最后把它赋值给一个字符串对象.然后用断点调试区查看生成的sql语句的结果,一般sql语句较长,验证的方式都是把这段sql语句copy到sql sever的脚本文件(.sql)中去执行一下,就知道是否正确了.当然也有先在sql server 中调试好拼接字符串后再copy到程序代码中去修改的.具体方式不定.

(以上是介绍的拼接sql语句方法,不过这种方式的安全性不高,常见的sql注入式攻击就是利用的拼接sql语句的缺陷.)

你还可以考虑使用带参数的存储过程来实现,这个就需要了解存储过程的一些知识了,具体的方法我就不介绍了,关于带参数的存储过程,网上有很多例子参考.

MappedStatement维护了一条<select|update|delete|insert>节点的封装

比如Mapper.xml中一个<select />节点

转换成Java类就是一个MappedStatement

使用Configuration的getMappedStatement方法来获取MappedStatement对象

获取的方式key的组成为 命名空间+id

负责根据用户传递的parameterObject, 动态地生成SQL语句 ,将信息封装到BoundSql对象中,并返回

表示动态生成的SQL语句以及相应的参数信息

当调用SqlSource的getBoundSql方法,传入的就是parameterMappings相对应的参数,最终生成BoundSql对象,有了BoundSql就可以执行sql语句了


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存