MyBatis入门基础3 ---代理
代理:给目标对象提供一个代理对象,并且由代理对象提供对目标对象的引用
代理的作用:功能的增强、控制访问:通过代理对象间接访问目标对象 ,以防直接访问目标对象产生不必要的风险。
首先提出一个问题:代理类如何知道它代理的是哪个类的哪个方法
有两种方式,第一种是用代理类来继承目标类,第二种是让目标类和代理类共同实现一个接口,然后将目标类的核心方法封装在接口当中,当代理类实现这个接口时,便可对目标类的方法进行重写增强。这样当用户使用时候,便可直接调用代理类里的方法即可。
这里我们选择用第二种方式来展示一下静态代理。我们以衣服制造为例
首先我们创建一个接口
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 ---代理相关推荐
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...
- MyBatis入门基础(一)
阅读目录 一:对原生态JDBC问题的总结 二:MyBatis框架 三:mybatis入门程序 四:mybatis和Hibernate的本质区别与应用场景 五:小结 回到顶部 一:对原生态JDBC问题的 ...
- mybatis入门基础(五)----动态SQL
阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1. ...
- mybatis入门基础(四)----输入映射和输出映射
阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...
- mybatis入门基础----高级映射(一对一,一对多,多对多)
一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 查看代码 测试数据代码: 查看代码 2.数据模型分析思路 (1).每张表记录的数据内容:分模块对每张表记录的内容进行熟悉,相当于你学习 ...
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 ...
- 【转自】mybatis入门基础----高级映射(一对一,一对多,多对多)
转自:http://www.cnblogs.com/selene/p/4627446.html 可参考https://blog.csdn.net/liu_yanzhao/article/details ...
- mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析
阅读目录 一:SqlMapConfig.xml配置文件的内容和配置顺序如下 二:properties属性 三:settings全局参数配置 四:typeAiases(别名)--重点掌握 五:typeH ...
- mybatis入门(一)之基础安装
转载自 mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...
最新文章
- 92号油的发动机能加97吗?标号越高不代表就越好
- SAP RETAIL 分配规则里的哪些数据不会被带入分配表?
- 传承德艺之馨——上海文联第八次代表大会侧记
- Golang闭包陷阱
- 06--JDBC各种连接方式的对比
- android o测试版,一加手机可升级!谷歌已正式推送Android O测试版系统
- 巧用路径工具做流线字
- 全连接神经网络_【模型解读】从“局部连接”回到“全连接”的Non-Local神经网络...
- 数据迁移期间进程命令
- oracle中树形数据,ORACLE树形数据解决方法
- 黑白群晖用做airplay一条命令实现USB声卡转音箱的网络播放(Docker-shairport-sync容器)
- 漫步者头戴式蓝牙耳机一边有声音一边没声音
- 真菌多样性分析ITS序列
- 计算机如何恢复桌面,如何恢复计算机桌面图标不见了
- kwm转mp3,kwm转flac
- 深夜爬虫, 我很抱歉 , 附微信 “ 网抑云” 公众号爬虫教程!
- java定义一个Person类
- Verilog基本语法——模块
- 亚商投资顾问 早餐FM/1130物流需求延续逐步恢复态势
- 你和自律的生活,只差这三十天的计划