SSMSSM
首页
  • 我的博客
  • 我的Github
首页
  • 我的博客
  • 我的Github
  • Java反射技术
  • 动态代理模式
  • 设计模式简介
  • 责任链模式
  • 观察者模式
  • 工厂模式与抽象工厂模式
  • 建造者模式
  • Web开发历史
  • Mybatis核心组件
  • Mybatis的反射
  • Mybatis配置

Mybatis 的反射

  • 涉及文件
    • UserMapper
    • UserMapper.xml
    • UserMapperImpl
  • Mybatis vs 原始反射

涉及文件

Mybatis 反射

UserMapper

package com.example.mapper;

import com.example.pojo.User;

public interface UserMapper {
    User selectUserById(int id);
}

UserMapper.xml

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" parameterType="int" resultType="com.example.pojo.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

UserMapperImpl

package com.example.mapper;

import com.example.pojo.User;

import java.lang.reflect.Method;

public class UserMapperImpl implements UserMapper {
    @Override
    public User selectUserById(int id) {
        // 连接数据库并实现:SELECT * FROM users WHERE id = #{id}
        return null;
    }

    // 通过反射,生成对象并调度方法
    public Object reflect() {
        UserMapperImpl object = null;
        try {
            object = (UserMapperImpl) Class.forName("com.example.mapper.UserMapperImpl").newInstance();
            Method method = object.getClass().getMethod("selectUserById", Integer.class);
            method.invoke(object, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return object;
    }
}

Mybatis vs 原始反射

Mybatis vs 反射

由此可见,MyBatis的底层是基于反射实现的动态代理。

最近更新:: 2025/10/17 05:26
Contributors: fireworks99
Prev
Mybatis核心组件
Next
Mybatis配置