在mybatis中,我们都只需要定义一个mapper接口,但并不需要对它进行任务实现。只要有对就的mapper.xml文件就可以访问数据库。那么,没有接口的访问是如何实现的呢。
答案就是JDK proxy.mybatis统一用代理类来写接口实现。在代理类中,实现读取配置文件并访问数据库存的操作。
现在我们来模拟一下,如何用代理类实现接口
1.定义接口,一个求各的方法
public interface FacadeCalculate { int add(int a,int b);}
2.定义一个handle类,继承InvocationHandler。在invoke方法中,返回两个参数相加的值。这里只是一个示例,并没有作验证和错误处理。
public class TraceHandler implements InvocationHandler { @Autowired private Calculate calculate; /** * Constructs a TraceHandler */ public TraceHandler() { } public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { return Integer.parseInt(args[0].toString()) + Integer.parseInt(args[1].toString()); }}
3.调用
public static void main(String[] args) { InvocationHandler handler = new TraceHandler(); FacadeCalculate proxy = (FacadeCalculate) Proxy.newProxyInstance(FacadeCalculate.class.getClassLoader(), new Class[] { FacadeCalculate.class }, handler); Integer result= proxy.add(2,3); System.out.println(result); }
输出值会是5.