接下来就可以写创建代理对象的方法了
类加载器,代理谁,就用谁的加载器,因为这里用daoInterfaceClass.getClassLoader()
第二个代理谁就要和谁有相同的接口,daoInterfaceClass本身就是一个接口,这里创建一个类的数组把daoInterfaceClass传进去。
如何代理呢?需要写一个自己的代理方式。MapperProxy这个类是没有的。
创建MapperProxy
实现接口InvocationHandler
重写invoke方法
这里把Mapper对象传递过来。
代理类的实现里面。定义Mappers然后通过构造函数去接收。
此时可以执行sql语句了
declare
美 [dɪ'kler]
英 [dɪ'kleə(r)]
- v.声明;宣布;声称;断言
- 网络宣告;数组声明;宣告行为
通过key获取到mapper对象。
这是一个runntime异常。
复制提供的工具类
放到我们的utils包下面。
改下报名,里面就是执行selectList方法。
导入Mapper的包。
工具类需要传递一个Connection参数
这里定义conn。通过构造函数传递进来。
DefaultSqlSession里面 需要高一个conn对象。传过去。但是这里目前还没有。我们还要再close方法里面是放Connection
在构造函数内赋值,把cfg这个对象传递过去
clsoe方法用try catch捕获异常。并判断是否为null
新建类DataSourceUtil
用户创建数据源的工具类。
直接return 创建好的Connection对象。
修正一个地方
下面用到putAll方法,上面就必须先new一个空的对象出来。
测试
最终的结构
查询所有最终就调用工具类
其实就是两件事,1创建代理对象 2实现查询所有。