前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis执行查询方法流程分析(纯干货) 创建代理对象的分析

Mybatis执行查询方法流程分析(纯干货) 创建代理对象的分析

原创
作者头像
韦恩少爷的背
修改2020-02-19 14:41:37
5270
修改2020-02-19 14:41:37
举报
文章被收录于专栏:SSM框架学习

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

一、连接数据库的信息

连接数据库的信息
连接数据库的信息

可以创建Connection对象

二、映射配置信息

映射配置信息
映射配置信息

三、sql执行语句

sql执行语句
sql执行语句

可以获取PreparedSatement

同时resultType还有封装的实体类全限定类名

以上三个部分都是读取配置文件:用到的技术就是解析XML的技术

此处用的是dom4j解析xml技术

我们需要提供两个信息

第一个:连接信息 (解析配置文件)

创建连接不多解释

第二个:映射信息

两个部分

第一:执行SQL语句

第二:封装结果的实体类全限定类名

可以将这两个信息组合起来定义成一个对象(Mapper)

Map的Key(通过String):com.bruce.dao.IUserDao.findAll

得到Mapper对象 String sql;String domainClassPath

四、调用SelectList

在这里插入图片描述
在这里插入图片描述

这里肯定有

代码语言:java
复制
//根据dao接口的字节码创建dao的代理对象
public <T> getMapper(Class<T> daoInterfaceClass){
    //创建代理对象 jdk中有方法
    /**
    *    类加载器和被代理对象使用相同的类加载器 
    *    代理对象要实现的接口:和被代理对象实现相同的接口 这里传的已经是一个dao接口的字节码了 我们创建代理对象只需要实现daoInterfaceClass
    *    如何代理:就是增强的方法,自己来提供
    *        此处是一个InvocationHandler的接口,我们需要写一个该接口的实现类
    *        在实现类中调用selectList方法
    */
    Proxy.newProxyInstance(类加载器,代理对象要实现的接口字节码数组,如何代理)
    //我们考虑的肯定是第三个参数
}

执行SelectList方法

1. 根据配置文件的信息创建Connection对象 注册驱动,获取连接

2. 获取预处理对象Preparedment 此时需要SQL语句

代码语言:java
复制
conn.prepareStatement(sql )
(第三步完成)

3. 执行查询

代码语言:javascript
复制
ResultSet resultSet = preparedStatement.exeuteQuery();

4. 遍历结果集用于封装 使用反射封装

代码语言:java
复制
    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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis执行findAll流程分析 创建代理对象的分析
    • 一、连接数据库的信息
      • 二、映射配置信息
        • 三、sql执行语句
          • 以上三个部分都是读取配置文件:用到的技术就是解析XML的技术
            • 第一个:连接信息 (解析配置文件)
            • 第二个:映射信息
          • 执行SelectList方法
            • 需要关注的
              • 不关注的
                • 这一波啊 这一波是肉蛋葱鸡
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档