0
点赞
收藏
分享

微信扫一扫

Mybatis执行流程


1 mapper接口和映射文件如何绑定



解析mapper配置信息,比如package配置、全限定名xml映射等方式,解析xml并将其与对应的mapper接口映射起来,用一个hashmap(knownMappers)映射起来。然后遍历Mapper接口中所有方法,将每个方法的全限定名作为key存在mapperStatements中。



注意点:同一个value会存储2次,一个全限定名作为key,另一个就是只用方法名(sql语句的id)来作为key。



        所以如果全局只存在一个方法名,就可以直接session.selectList("listAllUser")来执行,否则session.selectList("com.u.listAllUser");



Mybatis执行流程_java


 


2 sql执行流程(statementHandler)     -- 将参数弄好传进DB中,然后返回结果的


找到对应是select、insert、update、delete的方式,然后找到是返回多行还是单行还是游标,最后把sql传进执行


 


3 参数映射(parameterHandler)    -- 处理参数的


statementhandler找到对应的TypeHandler,通过传参类型绑定对应JdbcType,举例:


- select user_id,user_name from lw_user where user_name=#{userName}


- 其实会自动映射成:select user_id,user_name from lw_user where user_name=#{userName,jdbcType=VARCHAR}


当然也可以继承BaseTypeHandler来自定义一个typeHandler类型,如下:


- public class MyTypeHandler extends BaseTypeHandler<String> {  .. setNonNullParameter(..)....}


 


4 结果集映射(ResultSetHandler)        -- 处理返回结果的


同 "参数映射" ,这个最终也是走typeHandler,只是实现重写的方法一样,这个是重写 getXxxxxResult(xxxx)


- 可将JdbcType为varchar指定为Date类型,


 


整体流程:Configuration->SqlSessionFactory->SqlSession->Executor->(ParameterHandler->(StatementHandler->DB)->ResultSetHandler)



Mybatis执行流程_mybatis_02

Mybatis执行流程_spring_03


举报

相关推荐

0 条评论