SSMSSM
首页
  • 我的博客
  • 我的Github
首页
  • 我的博客
  • 我的Github
  • 1-Java反射技术
  • 1-动态代理模式
  • 1-设计模式简介
  • 1-责任链模式
  • 1-观察者模式
  • 1-工厂模式与抽象工厂模式
  • 1-建造者模式
  • 2-Web开发历史
  • 2-Mybatis核心组件
  • 2-Mybatis的反射
  • 2-Mybatis配置(mybatis-config.xml)
  • 2-映射器(XxxMapper.xml)
  • 2-JDBC and ORM
  • 3-Java修饰符
  • 3-Bean

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的底层是基于反射实现的动态代理。

最近更新: 2026/1/5 08:03
Contributors: fireworks99
Prev
2-Mybatis核心组件
Next
2-Mybatis配置(mybatis-config.xml)