可以创建Connection对象
可以获取PreparedSatement
同时resultType还有封装的实体类全限定类名
此处用的是dom4j解析xml技术
我们需要提供两个信息
创建连接不多解释
两个部分
第一:执行SQL语句
第二:封装结果的实体类全限定类名
可以将这两个信息组合起来定义成一个对象(Mapper)
Map的Key(通过String):com.bruce.dao.IUserDao.findAll
得到Mapper对象 String sql;String domainClassPath
四、调用SelectList
这里肯定有
//根据dao接口的字节码创建dao的代理对象
public <T> getMapper(Class<T> daoInterfaceClass){
//创建代理对象 jdk中有方法
/**
* 类加载器和被代理对象使用相同的类加载器
* 代理对象要实现的接口:和被代理对象实现相同的接口 这里传的已经是一个dao接口的字节码了 我们创建代理对象只需要实现daoInterfaceClass
* 如何代理:就是增强的方法,自己来提供
* 此处是一个InvocationHandler的接口,我们需要写一个该接口的实现类
* 在实现类中调用selectList方法
*/
Proxy.newProxyInstance(类加载器,代理对象要实现的接口字节码数组,如何代理)
//我们考虑的肯定是第三个参数
}
1. 根据配置文件的信息创建Connection对象 注册驱动,获取连接
2. 获取预处理对象Preparedment 此时需要SQL语句
conn.prepareStatement(sql )
(第三步完成)
3. 执行查询
ResultSet resultSet = preparedStatement.exeuteQuery();
4. 遍历结果集用于封装 使用反射封装
List<E> list = new ArrayList();
while(resultSet.next()){
E element = (E)Class.forName(配置的全限定类名).newInstance();
/**得到的封装信息,这个信息要封装到哪里去,都在配置文件*/
根据第三步全限定类名反射得到
进行封装,把每个rs的内容都添加到element中
/**我们的实体类属性和表中的列名是一致的。
于是我们就可以把表的列名看成是实体类的属性名称
就可以使用反射的方式来根据名称获取每个属性*/
把element加入到list中
list.add(element)
}
5.返回list
return list;
1.如何创建代理对象
2.使用的代理模式带来的优势
1.jdbc这一套就是SeletList下面的步骤 (应该大家原来都会…其实我不熟)
2.解析XML(这里的方式和学的可能不一样但结果一样…我也没学过…变强了再来看)
这里放一张网课的分析图 可能更便于理解
(点个赞求求了,我希望自己变强了 能写更容易理解点 我自己都有点迷 抱歉)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。