我目前使用的是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);返回一个动态代理类。
参数解析:
  1. //得到代理对象..注意这里的第一个参数 要和Dao是同一个类加载器
  2. //第二个参数是实现哪个接口,要和被代理实现同样的接口
  3. //第三个参数是织入的类,该类实现了InvocationHandle接口
 
以上,为mybatis的基础之一:动态代理。
												

mybatis 基础1(动态代理)的更多相关文章

  1. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  2. mybatis 05: mybatis中的动态代理

    mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...

  3. Mybatis之Mapper动态代理

    一.什么是Mapper的动态代理 采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接 ...

  4. Mybatis笔记 - Mapper动态代理

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...

  5. MyBatis笔记——Mapper动态代理

    前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...

  6. MyBatis通过Mapper动态代理来实现curd操作

    MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...

  7. java框架之MyBatis(1)-入门&动态代理开发

    前言 学MyBatis的原因 1.目前最主流的持久层框架为 Hibernate 与 MyBatis,而且国内公司目前使用 Mybatis 的要比 Hibernate 要多. 2.Hibernate 学 ...

  8. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

  9. Mybatis学习3——动态代理

    动态代理只需要接口和mapper映射文件不需要实现类 动态代理规范 1.namespace必须是接口的全路径 2.接口的方法必须与sql的id一致 3.接口的入参与parameterType类型一致 ...

  10. MyBatis使用Mapper动态代理开发Dao层

    开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...

随机推荐

  1. 过滤器(Filter)的应用

    过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpSe ...

  2. lua中的table、stack和registery

    ok,前面准备给一个dll写wrapper,写了篇日志,看似写的比较明白了,但是其实有很多米有弄明白的.比如PIL中使用的element,key,tname,field这些,还是比较容易混淆的.今天正 ...

  3. 资料推荐--Google Java编码规范

    之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...

  4. AngularJs $resource 高大上的数据交互

    $resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互. 需要注入 ngResource 模块.angular-resource[.min].js ...

  5. CF 439C Devu and Partitioning of the Array

    题目链接: 传送门 Devu and Partitioning of the Array time limit per test:1 second     memory limit per test: ...

  6. UML用例图

  7. primefaces p:tableData 显示 List<List>

    @javax.faces.bean.ViewScoped public class Controlador { private List<List> estadistico; @PostC ...

  8. 我的WCF Data Service 系列 (一、为什么要有WCF Data Service)

    开篇先说两名题外话, 在博问上,经常看到有个问性能问题,比如Entity Framework的性能行不行啊之类的. 其实这个行不行,关键还是看对象,一夜家族的老七可能勉强吃点蓝片片,也就行了,可真要让 ...

  9. nginx跨域设置

    nginx跨域问题例子:访问http://10.0.0.10/ 需要能实现跨域 操作:http://10.0.0.10/项目是部署在tomcat里面,tomcat跨域暂时还不会,按照网上的方法操作也没 ...

  10. IIS Express 外部访问

    http://blog.csdn.net/zhangjk1993/article/details/36671105