mybatis代理类Demo

前言

  简单实现通过代理接口来实现对数据的查询demo,也是对mybatis的一个熟练。首先是编写接口代理。

  public interface IBookMapper {

    List<BookModel> getBookList() throws Exception;
  }

  代理接口编写完毕后,需要在sqlMapConfig中添加映射,同时编码对应的mapper配置。我的接口和接口对应的mapper.xml是放在一个包下面的,目的是为了通过mappers映射器的package映射直接映射类过来。

<configuration>
  <properties resource="book.properties">
  </properties>
  <environments default="mysql">
    <environment id="mysql">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}" />
        <property name="url"
          value="jdbc:mysql://localhost:3306/mytest?characterEncoding=utf-8" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.pwd}" />
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <package name="Mapper" />
  </mappers>
</configuration>

  对应的mapper配置

<mapper namespace="Mapper.IBookMapper">
  <select id="getBookList" resultType="Models.BookModel">
      select * from book
  </select>
</mapper>

需要注意的是:mapper配置中的namespace是我们要找的代理接口,需要整个命名空间权限名。我们在sqlSessionConfig中的mappers映射器中的pacakge的name是我们要去映射的包,包里面有我们的代理接口和映射配置文件,配置文件的名字和代理接口的名字是一样的。如下图:

  基本已经完成,接下来我们开始通过junit来测试我们的结果。

  

  @Test
  public void selectTest() {
    SqlSession openSession = factory.openSession();
    IBookMapper mapper = openSession.getMapper(IBookMapper.class);
    List<BookModel> list = null;
    try {
      list = mapper.getBookList();
    } catch (Exception e) {
      e.printStackTrace();
    }
    openSession.close();
    if (list != null) {
      for (BookModel b : list) {
        System.out.println(b);
      }
    }

  }

  测试结果,在我们的控制台输出我们的查询结果:

  

总结

  对于学习新的东西,有人指导一下我想会更好,没有指导,在自己学完以后,做个demo是对所学的东西的最好的诠释。即使有人指导,有人教,那么在听取以后,要去思考把东西融入到自己的理解中然后按照自己的理解去demo一下会更加能加深对知识的巩固。一定是接着别人的讲,而不是按照别人的讲。更多的是要去与大家分享,很可能会得到更多的收获。

            don‘t say you finish study,no,it just as  beginning

时间: 2024-12-13 16:39:15

mybatis代理类Demo的相关文章

连接MyBatis内部SqlSession与业务接口的代理类MapperProxy

目的 系统中的业务接口需要调用MyBatis的SQL时,业务接口定义的参数不符合MyBatis自己内部的规范,那么就需要把业务接口的参数转换成MyBatis内部参数规,MapperProxy代理就完成了这一职责,下面就来分析一下. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {     if (Object.class.equals(method.getDeclaringCla

Mybatis源码解析,一步一步从浅入深(六):映射代理类的获取

在文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们提到了两个问题: 1,为什么在以前的代码流程中从来没有addMapper,而这里却有getMapper? 2,UserDao明明是我们定义的一个接口类,根本没有定义实现类,那这个userMapper是什么?是mybatis自动为我们生成的实现类吗? 为了更好的解释着两个问题,我们需要重新认识Configuration这个类. 但是在这之前,你需要了解一个概念(设计模式):JAVA设计模式-动态代理(Proxy)示例及说明

探索Mybatis之JDK动态代理:探究Proxy.newProxyInstance()生成的代理类解析

Mybatis的Mapper接口UserMapper 1 package com.safin.Mapper; 2 3 import com.safin.Pojo.User; 4 5 import java.util.List; 6 7 public interface UserMapper { 8 int insertUser(User user); 9 User getUser(Long id); 10 List<User> findUser(String userName); 11 } 我

动态代理类

动态代理类 Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类: (1)Interface InvocationHandler:该接口中仅定义了一个方法public object invoke(Object obj,Method method, Object[] args)在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,如上例中的request(),args为该方法的参数数组. 这个抽象方法在代理类中动态实现.(2)Proxy:该类即

Java中的静态代理、通用动态代理类以及原理剖析

代理模式和静态代理 在开发中,代理模式是常用的模式之一,一般来说我们使用的代理模式基本上都是静态代理,实现模式大致如下 : 我们以网络代理为例,简单演示一下静态代理的实现 : // 网络接口 interface Network { public void surfTheInternet(); public void gotoFacebook(); } // 普通网络 class CommonNetwork implements Network { @Override public void su

mybatis代理机制讲解

问题描述 在使用Mybatis开发中,或者和Spring整合中,在Dao层中的Mapper接口与xml中的sql对应着,在service中直接调用Dao中的方法就可以直接访问sql.如下所示: /** * interface 层的代码 */ public interface ArticleMapper { Article selectByPrimaryKey(Integer id); } 在xml中,我们的sql语句这样定义: <!-- xml中对应的sql --> ... <selec

mybatis属性类

目录 配置文件 InterceptorChain Configuration Configuration构造器 TypeAliasRegistry Environment JdbcTransaction DefaultSqlSession SqlCommand MethodSignature BoundSql 配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PU

在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件(转)

WCF服务调用可以采用两个方法,由工具SvcUtil.exe生成本地代理服务类和配置文件方式,或者采用ChannelFactory直接创建服务代理对象.本文主要采用前面一种方式来进行. SvcUtil.exe位于:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目录下,可以将本工具添加到VS2010的工具菜单中,以方便使用: VS菜单->工具->外部工具->添加->在“命令”文本框选取其路径如下:C:\Program Files\M

Spring AOP 实现原理(三) 使用 使用 CGLIB 生成代理类

CGLIB(Code Generation Library),简单来说,就是一个代码生成类库.它可以在运行时候动态是生成某个类的子类. 此处使用前面定义的 Chinese 类,现在改为直接使用 CGLIB 来生成代理,这个代理类同样可以实现 Spring AOP 代理所达到的效果. 下面先为 CGLIB 提供一个拦截器实现类: public class AroundAdvice implements MethodInterceptor { public Object intercept(Obje