mybatis 基础1(动态代理)
我目前使用的是mybatis 3.3.0版本。
可使用
1.xml文本,
2.dao类,
3.sqlSession.getMapper(Class<T> type),
生成sql类,
原理:动态代理。
动态代理展示:
@1:接口:ProxyInterface
public interface ProxyInterface {
public void sayHA();
}
@2:接口实现类ProxyImp
public class ProxyImp implements ProxyInterface {
@Override
public void sayHA() {
System.out.println("继承类继承类继承类继承类继承类!");
}
}
@3:代理类:ProxyService
public class ProxyService implements InvocationHandler{
Object target;
Object proxyLei;
ProxyService(Object target,Class[] interfaces){
this.target=target;
this.proxyLei= Proxy.newProxyInstance(target.getClass().getClassLoader(),interfaces,this);
}
ProxyService(){} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invokeinvokeinvokeinvokeinvokeinvoke");
return "111";
}
} @4:测试类:Test
public class Test {
public static void main(String []args){
ProxyInterface proxyImp=new ProxyImp();
System.out.println(proxyImp.getClass());
proxyImp.sayHA();
ProxyService proxy=new ProxyService(proxyImp,proxyImp.getClass().getInterfaces());
System.out.println(proxy.proxyLei); proxyImp=(ProxyInterface)proxy.proxyLei;
System.out.println(proxyImp.getClass());
proxyImp.sayHA();
}
}
输出值:
class com.proxy1.ProxyImp
继承类继承类继承类继承类继承类!
invokeinvokeinvokeinvokeinvokeinvoke
111
class com.sun.proxy.$Proxy0
解析:
第一个System.out.println(proxyImp.getClass());输出的是:class com.proxy1.ProxyImp,这是一个类;
第二个System.out.println(proxyImp.getClass());输出的是:class com.sun.proxy.$Proxy0,这是一个代理类;
第一个proxyImp.sayHA();输出的是:继承类继承类继承类继承类继承类!,这是原方法的正确输出;
第一个proxyImp.sayHA();输出的是:
invokeinvokeinvokeinvokeinvokeinvoke
111
这是代理类ProxyService的invoke方法的正确输出。
以上是一个简单的完整的代理类示例。
小结: 点1:动态代理的代理类(ProxyService)需要继承类InvocationHandler,根据jdk的英文解释,当调用代理类的方法时,ProxyService的invoke方法将会被调用。而
ProxyService所代理的类的方法将不会被调用,但可在ProxyService的invoke方法中被调用。使用方法:method.invoke(target,args);
点2:方法:
Proxy.newProxyInstance(target.getClass().getClassLoader(),interfaces,this);返回一个动态代理类。
参数解析:
- //得到代理对象..注意这里的第一个参数 要和Dao是同一个类加载器
- //第二个参数是实现哪个接口,要和被代理实现同样的接口
- //第三个参数是织入的类,该类实现了InvocationHandle接口
以上,为mybatis的基础之一:动态代理。
mybatis 基础1(动态代理)的更多相关文章
- JavaWeb_(Mybatis框架)Mapper动态代理开发_三
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- mybatis 05: mybatis中的动态代理
mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...
- Mybatis之Mapper动态代理
一.什么是Mapper的动态代理 采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接 ...
- Mybatis笔记 - Mapper动态代理
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...
- MyBatis笔记——Mapper动态代理
前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...
- MyBatis通过Mapper动态代理来实现curd操作
MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...
- java框架之MyBatis(1)-入门&动态代理开发
前言 学MyBatis的原因 1.目前最主流的持久层框架为 Hibernate 与 MyBatis,而且国内公司目前使用 Mybatis 的要比 Hibernate 要多. 2.Hibernate 学 ...
- 【Mybatis】-- Mapper动态代理开发注意事项
1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...
- Mybatis学习3——动态代理
动态代理只需要接口和mapper映射文件不需要实现类 动态代理规范 1.namespace必须是接口的全路径 2.接口的方法必须与sql的id一致 3.接口的入参与parameterType类型一致 ...
- MyBatis使用Mapper动态代理开发Dao层
开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...
随机推荐
- gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能
今天vim出现:“gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能” 解决办法: 修改你的.vimrc,增加下面的一行: set directory=.,$TEMP "默 ...
- 海边直播目标2017全国初中数学竞赛班课堂测试题解答-The Final
1. 设函数 $f(x) = 2^x(ax^2 + bx + c)$ 满足等式 $f(x+1) - f(x) = 2^x\cdot x^2$, 求 $f(1)$. 解答: 由 $f(x) = 2^x( ...
- JS 复制对象
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- JS, Node.js, npm简介
序 听过JS,听过Node,也听过Node.js,还听过npm,然而并不是很清楚的知道都代表什么,这两天调接口,然后前端同学很忙,就自己把前端代码拿过来跑了,也趁机了解一下这几个概念,下边做个小的总结 ...
- JavaWeb---总结(十六)JSP指令
一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...
- 获取List集合中最大值的方法
public static void main(String args[]) { //Double[] num = { 45.1,45.2 }; Li ...
- 转:在VS2010下编译、调试和生成mex文件
最近帮人调了一个程序,是网上公开的代码,利用matlab与c++混合编程做三维模型关键点检测,发现他们可以用VS2010编译.调试.生成mexw32文件,因此觉得之前在Matlab上利用mex命令真是 ...
- HTML学习笔记——post表单
1>form1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- [原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则 转载请注明出处:http://www.codelast.com/ line search(一维 ...
- LaTex数学符号
http://web.ift.uib.no/Teori/KURS/WRK/TeX/symALL.html