Mybatis执行findAll流程分析 创建代理对象的分析

Mybatis执行findAll流程分析 创建代理对象的分析

一、连接数据库的信息

连接数据库的信息
可以创建Connection对象

二、映射配置信息

映射配置信息

三、sql执行语句

sql执行语句
可以获取PreparedSatement
同时resultType还有封装的实体类全限定类名

以上三个部分都是读取配置文件:用到的技术就是解析XML的技术
此处用的是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(类加载器,代理对象要实现的接口字节码数组,如何代理)
	//我们考虑的肯定是第三个参数
}

执行SelectList方法

  1. 根据配置文件的信息创建Connection对象
    注册驱动,获取连接
  2. 获取预处理对象Preparedment
    此时需要SQL语句
conn.prepareStatement(sql )
(第三步完成)
  1. 执行查询
ResultSet resultSet = preparedStatement.exeuteQuery();
  1. 遍历结果集用于封装
    使用反射封装
	List<E> list = new ArrayList();
		while(resultSet.next()){
			E element = (E)Class.forName(配置的全限定类名).newInstance();
			/**得到的封装信息,这个信息要封装到哪里去,都在配置文件*/
			根据第三步全限定类名反射得到
			进行封装,把每个rs的内容都添加到element中
			/**我们的实体类属性和表中的列名是一致的。
			于是我们就可以把表的列名看成是实体类的属性名称
			就可以使用反射的方式来根据名称获取每个属性*/
			把element加入到list中
			list.add(element)
		}
  1. 返回list
    return list;
需要关注的
  1. 如何创建代理对象
  2. 使用的代理模式带来的优势
不关注的
  1. jdbc这一套就是SeletList下面的步骤 (应该大家原来都会…其实我不熟)
  2. 解析XML(这里的方式和学的可能不一样但结果一样…我也没学过…变强了再来看)

这里放一张网课的分析图 可能更便于理解
查询所有的分析

这一波啊 这一波是肉蛋葱鸡

(点个赞求求了,我希望自己变强了 能写更容易理解点 我自己都有点迷 抱歉)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值