Mybatis学习day_02自定义mybatis的分析

findAll的分析

  • mybatis在使用代理Dao的方式实现增删改查时做了什么事呢?
    1. 创建代理对象
    2. 在代理对象中调用selectList方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eR0Bfwu-1569512872845)(./images/查询所有的分析.png)]

  • 读取配置文件:用到的技术就是解析xml的技术(此处用dom4j解析xml技术)

    • 配置连接数据库的信息
    • 映射配置信息(xml配置文件的位置)
    • 得到PrepareStatement语句的配置信息(mapper),此配置中还有封装的实体类全限定类名
  • selectList方法

    1. 根据配置文件的信息创建Connection对象,注册驱动,获取连接
    2. 获取预处理对象PrepareStatement,此时需要SQL语句,conn.prepareStatement(sql);(来自mapper)
    3. 执行查询 ResultSet resultSet = prepareStatement.executeQuery();
    4. 遍历结果集用于封装
      List<E> list = new ArrayList();
      while(resultSet.next())
      {
          E element = (E)Class.forName(配置的全限定类名).newInstance();
          //进行封装,把每个rs的内容都封装到element中
          //反射
          //实体类属性和表中的列名是一致的
          //于是就可以把表的列名看成是实体类的属性名称
          //使用反射的方式来根据名称获取每个属性,并把值赋进去
          //把element加入到list中
          list.add(element);
      }
      
    5. 返回list
  • 想让上面的selectList方法执行,需要提供两个信息

    • 连接信息
    • 映射信息
      • 包括两部分(执行的sql语句 + 封装结果的实体类全限定类名),把这两个信息组合起来定义成一个对象
      • 即 String(com.itheima.dao.IUserDao.findAll)
      • Mapper对象(String domainClassPath & String sql)

自定义Mybatis的分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8E73Q17-1569512872846)('./images/自定义Mybatis分析.png)]

//根据dao接口字节码创建dao的代理对象
public <T> T getMapper(Class <T> daoInterfaceClass)
{
    /**
        类加载器:它使用的和被代理对象是相同的类加载器
        代理对象要实现的接口:和被代理对象实现相同的接口
        如何代理:它就是增强的方法,我们需要自己来提供
                此处是一个InvocationHandler的接口,我们需要写一个该接口的实现类,在实现类中调用selectList方法
    */
    Proxy.newProxyInstance(类加载气息,代理对象要实现的接口字节码数,如何代理);
}

自定义mybatis能通过入门案例看到的类

+ class Resource
+ SqlSessionFactoryBuilder
+ interface SqlSessionFactory
+ interface SqlSession

Mybatis开发流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TkZA0aOJ-1569551055104)(./images/自定义mybatis开发流程图.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值