mybatis源码-结果集处理

  作者:记性不好的阁主


源码地图:http://coderead.cn/p/mybatis/map/file/%E7%BB%93%E6%9E%9C%E9%9B%86%E5%A4%84%E7%90%86.map




预处理(建立数据库连接):java.sql.Connection




执行查询:java.sql.PreparedStatement.execute()






1、查询数据库




1.1、预处理


建立与数据库的连接




1.1.1、构建Statement




1.1.2、设置参数




2、执行查询




2.1、获取结果集




2.2、处理结果集


是否有自定义结果集处理器,如果没有就会采用默认的 DefaultResultHandler




2.2.1、处理结果行


是否有嵌套结果映射,有就走嵌套结果集处理,没有就走简单结果集处理



2.2.1.1、遍历结果行


调用resultSet.next()遍历行, 并且基于上文判断是否要继续往下读取




2.2.1.1.1、跳过指定行


用于分页




2.2.1.1.2、封装行对象


基于当前结行,创建结果对象 并为其填充属性值





2.2.1.1.3、暂存结果对象


即保存至 DefaultResultHandler.list 中





2.2.1.1.2.1、设置懒加载代理


创建对象,然后判断是否存在懒加载子查询,并为其GET方法设置懒加载代理




2.2.1.1.2.1.1、创建结果对象


有四种情况: 1.原始类型创建如String、Integer 等 2.基于构造参数映射 创建 3.返回结果为接口,或存在无参构造方法,基于ObjectFatory创建 4.基于自动映射,自动依次查找型是否与指定构造方法匹配,如果有就自动创建。




2.2.1.1.2.2、填充属性 (自动映射)


填充自动映射填充属性




2.2.1.1.2.2.1、自动创建结果映射集


基于JAVA Class Type自动创建结果集映射




2.2.1.1.2.2.2、读取字符串列





2.2.1.1.2.3、填充属性 (手动映射)


基于ResultMapping 获取属性的值




2.2.1.1.2.3.1、获取属性值


1.基于子查询获取值 2.基于指定结果集(多结果集) 3.普通的属性值获取




2.2.1.1.2.3.1.1、读取字符串列



2.2.1.1.2.3.1.2、读取Integer列








相关推荐

评论 抢沙发

表情

分类选择