面试题答案
一键面试1. 实现过程概述
MyBatis利用反射将SQL查询结果映射到Java对象主要涉及以下步骤:
- 获取结果集元数据:MyBatis通过JDBC获取
ResultSet
,进而获取结果集元数据,了解列名和数据类型等信息。 - 创建目标对象:利用反射创建目标Java对象的实例。
- 设置对象属性值:根据结果集元数据,通过反射调用目标对象的属性设置方法(通常是
setter
方法),将结果集中对应列的值赋给对象的属性。
2. 关键类和方法
ResultSetHandler
类:负责处理ResultSet
,将其转换为Java对象。核心方法handleResultSets(Statement stmt)
,在这个方法中,会遍历ResultSet
并处理结果集映射。MetaObject
类:MyBatis中用于操作对象属性的类,它提供了一套方便的机制来访问和修改对象的属性。通过MetaObject.forObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory)
方法创建MetaObject
实例,进而可以使用setValue(String name, Object value)
方法来设置对象属性值。ObjectFactory
接口:用于创建Java对象实例。默认实现类DefaultObjectFactory
,其create(Class<T> type)
方法根据传入的类类型创建对象实例。- 反射相关的Java原生方法:例如
Class.forName(String className)
用于加载类,Constructor.newInstance(Object... initargs)
用于创建对象实例,Method.invoke(Object obj, Object... args)
用于调用对象的方法(如setter
方法)。在MyBatis中,通过这些Java原生反射方法来完成对象的创建和属性设置。