首页 > 其他分享 >映射器代理工厂

映射器代理工厂

时间:2024-07-14 12:55:19浏览次数:14  
标签:映射器 MapperProxyFactory 代理 接口 mapperInterface Mybatis 工厂 public

我们在使用Mybatis时,只需要写Mapper和Dao接口就行,使用的时候只需要调用Dao中的方法就能完成数据的增删改查。那么Dao中的方法是谁实现的呢?难道Mybatis自动帮我们写了一个Dao的实现类吗?非也!而是使用了映射器代理工厂来实现的。

映射器代理工厂(Mapper Proxy Factory)在Mybatis框架中扮演着至关重要的角色。它是用来创建映射器接口的代理对象的工厂类,通过这个工厂类,可以实现对数据库操作的抽象和简化。映射器代理工厂在Mybatis中的作用是:根据映射器接口(Mapper Interface),动态生成该接口的代理对象。这个代理对象实现了接口中定义的所有方法,并且在方法被调用时,会执行相应的数据库操作。通过这种方式,Mybatis实现了接口与数据库操作之间的解耦,使得开发者只需要定义接口,而无需编写具体的实现类。

MapperProxy

public class MapperProxy<T> implements InvocationHandler {
    private final Class<T> mapperInterface;

    public MapperProxy(Class<T> mapperInterface) {
        this.mapperInterface = mapperInterface;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if("getUserNameById".equals(method.getName())){
            System.out.println("查询Id为"+args[0]+"的用户名...");
            return "周杰伦"; // 模拟从执行SQL从数据库中查询数据
        }
        if("deleteUserById".equals(method.getName())){
            System.out.println("删除Id为"+args[0]+"的用户...");
            System.out.println("成功删除User");
        }
        return null;
    }
}

MapperProxyFactory

public class MapperProxyFactory<T> {

    private final Class<T> mapperInterface;

    public MapperProxyFactory(Class<T> mapperInterface) {
        this.mapperInterface = mapperInterface;
    }

    public T newInstance() {
        final MapperProxy<T> mapperProxy = new MapperProxy<>(mapperInterface);
        return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[]{mapperInterface}, mapperProxy);
    }

}

IUserDao

public interface IUserDao {
    String getUserNameById(String id);
    void deleteUserById(String id);
}

Test

public class MainTest {
    public static void main(String[] args) {
        MapperProxyFactory<IUserDao> factory = new MapperProxyFactory<>(IUserDao.class);
        IUserDao iUserDao = factory.newInstance();

        String name = iUserDao.getUserNameById("123");
        System.out.println(name);
        iUserDao.deleteUserById("123");
    }
}

标签:映射器,MapperProxyFactory,代理,接口,mapperInterface,Mybatis,工厂,public
From: https://blog.csdn.net/cj151525/article/details/140414918

相关文章

  • 基于Java的休闲娱乐代理售票系统
    你好,我是专注于Java开发的码农小野!如果你对系统开发感兴趣,欢迎私信交流。开发语言:Java数据库:MySQL技术:Java技术、SpringBoot框架、B/S架构工具:EclipseIDE、MySQL数据库管理工具系统展示首页用户注册界面折扣票管理管理员功能界面摘要本论文介绍了一个基于J......
  • 手机怎么用代理ip上网
    在数字化时代,网络已经成为我们生活中不可或缺的一部分。然而,有时候出于安全、隐私或访问特定网络资源的需要,我们可能需要使用代理IP来上网。那么,什么是代理IP?如何在手机上设置并使用它呢?本文将为您详细解答。一、代理IP的基本概念代理IP,简单来说,就是通过一个中间服务器来访......
  • 用了代理IP可以让网速有所提升吗?
    代理IP作为一种网络工具,近年来在互联网用户中越来越受到关注。很多人认为使用代理IP可以提升网速,但这种观点是否正确呢?本文将从多个方面对此进行探讨。首先,我们需要明确什么是代理IP。代理IP是一种通过代理服务器来转发用户请求的网络服务。当用户通过代理服务器访问目标网站......
  • 嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)
    1.项目概述本项目旨在开发一套先进的智能工厂设备监控系统,集成嵌入式技术、工业通信协议和人机界面等多项技术,实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率,大幅降低维护成本,并为管理层决策提供可靠的数据支持。主要功......
  • git设置代理, git clone无法连接github怎么办?MAC SSH如何连接github
    1.临时设置打开GitBash,使用命令临时设定socks代理:gitconfig--globalhttp.proxy'socks5://127.0.0.1:10808' gitconfig--globalhttps.proxy'socks5://127.0.0.1:10809'或者http代理:gitconfig--globalhttp.proxy'http://127.0.0.1:10809'#最......
  • jdk动态代理与cglib动态代理
    最近在用java实现redis,在使用动态代理时遇到了一点问题,即使用jdk动态代理(Invocationhandler)时,如果代理对象是一个接口的实现类,那么此时动态代理获取到的method对象是接口中的,而不是实现类的,现象是:我在实现类中对接口方法上新增了注解,但是此刻method反射获取不到注解信息,于是大概......
  • 《代理选择与反爬虫策略探究:如何优化网络爬虫效率与稳定性》
    代理IP如何选以及常见反爬策略为什么需要代理?因为有的网站会封IP,用户如果没有登录,那IP就是身份标识,如果网站发现用户行为异常就非常可能封IP什么是代理IP就是让一个人帮你转交请求,帮你转交的人对面不熟,也就难以发现频繁请求的是你但是要注意我们只能使用高匿代理,透明代理(转交......
  • Lingo学习(二)——线性规划基础、矩阵工厂
    一、线性规划基础(一)方法①一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo无法直接解)②求目标函数的最大值或最小值分别用max=…或min=…来表示。③以!开头,以;结束的语句是注释语句;④线性规划和非线性规划的本质区别是目标函数是否线性......
  • Lingo学习(三)——工厂合并、运算符、内置函数
    一、工厂合并(一)工厂合并——生产二维矩阵【引入】sets:                                factory/1..6/:a;                  plant/1..8/:d;                    Cooperation(fact......
  • 为什么使用代理IP无法访问网站
    代理IP可以为用户在访问网站时提供更多的便利性和匿名性,但有时用户使用代理IP后可能会遇到无法访问目标网站的问题。这可能会导致用户无法完成所需的业务要求,给用户带来麻烦。使用代理IP时,您可能会因为各种原因而无法访问您的网站。以下是代理IP无法访问网站的一些常见原因:1、......