我目前使用的是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. Hibernate学习-Hibernate查询语言HQL

    HQL(Hibernate Query Language)Hibernate查询语言,语法类似于SQL,可以直接使用实体类及属性. 使用HQL 可以避免使用JDBC 查询的一些弊端 不需要再编写繁复的 ...

  2. 论github客户端的使用与团队协作

    首先:如果你觉得小编写的一般般,那你就默念小编是渣渣,我相信你就会好起来的 -------------------------------------------------------------- ...

  3. RESTful的理解

    REST(Representational State Transfer ),有中文翻译为"具象状态传输"(也有:"代表性状态传输").是由 Roy Thoma ...

  4. Server 对象

    如何解决Response.Redirect方法传递汉字丢失或乱码问题? 为了确保传递的汉字被正确地接收,可以在传值之前使用Server对象的UrlEncode方法对所传递的汉字进行URL编码.代码如下 ...

  5. C#调用Windows API函数截图

    界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...

  6. HTML5系列四(WebWorker、地理定位)

    WebWorker简单应用 先从一个简单例子说起,计算数值加法 <script> var worker = new Worker('sumCalculate.js'); worker.on ...

  7. 总结jQuery选择器

    基本选择器 1. id选择器(指定id元素) 2. class选择器(遍历css类元素) 3. element选择器(遍历html元素) 4. * 选择器(遍历所有元素) 5. 并列选择器$('p,d ...

  8. JavaWeb---总结(十四)JSP原理

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  9. C#编写滤镜 图片色调取反效果(Invert)

    转自:http://www.it165.net/pro/html/201208/3469.html Invert 英文叫做颠倒.. 原理很简单也就是 将 255- 原本的值.. 这样 0(黑) 就会变 ...

  10. MSDeploy 同步时不删除原有文件

    在 jenkins里  Execute Windows batch command "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\m ...