问题场景
在开发项目中,自己在本地测试的时候可能需要去验证SQL问题。但是会存在一些问题:例如,这条SQL语句是错误的,那么mybais在执行中会报错,并且SQL语句和参数都是处于分离的状态。
导致从打印台中复制出来的SQL语句在需要参数的地方都是显示?
符号。
执行前
Preparing : select * from user where id = ?
Parameters : 1(Integer)
成功执行后
==> select * from user where id = 1
SQL语句语法错误等问题
system ... check your mysql version ....(等等问题)
解决方案
这里通过理解mybaits一点源码去解析。
在mybatis中,最终通过Executor
去执行我们的SQL,针对大多数情况而言
,几乎都是使用SimpleExecutor
去执行对应的查询语句。
我们可以通过找到这类,找到doQuery
方法。
接着点进prepareStatement
方法,发现都是JDBC的那一套。
1、获取数据库连接
2、预编译SQL
也就是在执行完prepareStatement
方法后参数已经拼装完成,可以通过stmt
对象去获取拼装好参数的SQL语句。