代理:给目标对象提供一个代理对象,并且由代理对象提供对目标对象的引用

代理的作用:功能的增强、控制访问:通过代理对象间接访问目标对象 ,以防直接访问目标对象产生不必要的风险。

首先提出一个问题:代理类如何知道它代理的是哪个类的哪个方法

有两种方式,第一种是用代理类来继承目标类,第二种是让目标类和代理类共同实现一个接口,然后将目标类的核心方法封装在接口当中,当代理类实现这个接口时,便可对目标类的方法进行重写增强。这样当用户使用时候,便可直接调用代理类里的方法即可。

这里我们选择用第二种方式来展示一下静态代理。我们以衣服制造为例

首先我们创建一个接口

public interface Clothes {void clothes(String size);
}

我们创建一个目标类:衣服制造类,它继承了Clothes接口

public class ClothesFactory implements Clothes {public void clothes(String size){System.out.println("生产衣服的尺寸为:"+size);}
}

我们再来创建ClothesFactory的代理类,也继承Clothes接口,我们可以在代理类里对clothes方法进行丰富拓展。

public class Proxy implements Clothes {private ClothesFactory clothesFactory = new ClothesFactory();//代理对象public void FrontService(){System.out.println("衣服制造前的市场调研");}public void endService(){System.out.println("制造衣服后的后置服务");}@Overridepublic void clothes(String size) {FrontService();clothesFactory.clothes(size);endService();}
}

我们创建一个测试类

public class Test {public static void main(String[] args) {Proxy proxy = new Proxy();proxy.clothes("xxl");}
}

运行结果:

我们通过代理类的对象调用了clothes方法。

下面我们来介绍下MyBatis的基本初始流程

我们知道使用mybatis的时候,一般是一个接口对应一个xml文件,项目启动时根据xml文件路径读取所有的xml信息。

我们通过I/O输入流的方式将xml主配置文件加载到内存中,同时将目标xml文件读取到内存(配置文件中映射了目标xml文件)

private InputStream in = null;
private SqlSession session = null;
private UserDao mapper = null;

in = Resources.getResourceAsStream("SqlMapConfig.xml");

然后根据主配置文件来创建一个SqlSessionFactory


SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

通过工厂来创建Session,Session是和数据库连接的最小分子

session = factory.openSession();

然后通过session来生成最终的代理对象

mapper = session.getMapper(UserDao.class);

由此方法生成的mapper就是动态代理对象。

MyBatis基础入门1 - mac下MyBatis在idea的配置

Mybatis基础入门2-----简单的增删改查

MyBatis基础入门4:#{}和${}传参的使用区别

Mybatis基础入门5:动态sql

MyBatis基础入门6:关联映射

MyBatis基础入门7:注解开发

MyBatis基础入门8:缓存机制

MyBatis入门基础3 ---代理相关推荐

  1. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...

  2. MyBatis入门基础(一)

    阅读目录 一:对原生态JDBC问题的总结 二:MyBatis框架 三:mybatis入门程序 四:mybatis和Hibernate的本质区别与应用场景 五:小结 回到顶部 一:对原生态JDBC问题的 ...

  3. mybatis入门基础(五)----动态SQL

    阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1. ...

  4. mybatis入门基础(四)----输入映射和输出映射

    阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...

  5. mybatis入门基础----高级映射(一对一,一对多,多对多)

    一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码:  查看代码 测试数据代码:  查看代码 2.数据模型分析思路 (1).每张表记录的数据内容:分模块对每张表记录的内容进行熟悉,相当于你学习 ...

  6. mybatis入门基础(六)----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 ...

  7. 【转自】mybatis入门基础----高级映射(一对一,一对多,多对多)

    转自:http://www.cnblogs.com/selene/p/4627446.html 可参考https://blog.csdn.net/liu_yanzhao/article/details ...

  8. mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析

    阅读目录 一:SqlMapConfig.xml配置文件的内容和配置顺序如下 二:properties属性 三:settings全局参数配置 四:typeAiases(别名)--重点掌握 五:typeH ...

  9. mybatis入门(一)之基础安装

    转载自  mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...

最新文章

  1. 92号油的发动机能加97吗?标号越高不代表就越好
  2. SAP RETAIL 分配规则里的哪些数据不会被带入分配表?
  3. 传承德艺之馨——上海文联第八次代表大会侧记
  4. Golang闭包陷阱
  5. 06--JDBC各种连接方式的对比
  6. android o测试版,一加手机可升级!谷歌已正式推送Android O测试版系统
  7. 巧用路径工具做流线字
  8. 全连接神经网络_【模型解读】从“局部连接”回到“全连接”的Non-Local神经网络...
  9. 数据迁移期间进程命令
  10. oracle中树形数据,ORACLE树形数据解决方法
  11. 黑白群晖用做airplay一条命令实现USB声卡转音箱的网络播放(Docker-shairport-sync容器)
  12. 漫步者头戴式蓝牙耳机一边有声音一边没声音
  13. 真菌多样性分析ITS序列
  14. 计算机如何恢复桌面,如何恢复计算机桌面图标不见了
  15. kwm转mp3,kwm转flac
  16. 深夜爬虫, 我很抱歉 , 附微信 “ 网抑云” 公众号爬虫教程!
  17. java定义一个Person类
  18. Verilog基本语法——模块
  19. 亚商投资顾问 早餐FM/1130物流需求延续逐步恢复态势
  20. 你和自律的生活,只差这三十天的计划

热门文章

  1. 《找你妹2》开发者云中游再声明:热酷涉嫌严重违约发布侵权竞品
  2. Netty整合Disruptor实战
  3. 程序员写代码太猛,电脑有意见了!| 每日趣闻
  4. 开发者中文文档集合网址 《印记中文》
  5. Burp Suite汉化
  6. 香农熵、相对熵(KL散度)与交叉熵
  7. 《FreeSWITCH: VoIP实战》:FreeSWITCH 初步
  8. 同步电机的阻尼绕组是真实存在的吗
  9. 相关性分析 协方差 相关系数
  10. 51单片机:proteus仿真1602LCD的显示