zoukankan      html  css  js  c++  java
  • slick源码阅读笔记二 slick.lifted.Rep

    转载请注明出处
    https://www.cnblogs.com/elyw/p/10282476.html

    目录

    slick源码阅读笔记 目录&总览

    slick源码阅读笔记一 slick.ast

    slick源码阅读笔记二 slick.lifted.Rep

    slick源码阅读笔记三 ShapedValue 在Table和Query上的应用

    slick源码阅读笔记四 隐式转换--column与Query查询功能实现

    slick源码阅读笔记五 Query查询条件生成与OptionMapper

    2. slick.lifted.Rep

    Rep是在使用slick最常碰到的类,也是slick的灵魂所在。 利用Rep实现了类似scala.collection的api以及编译时/运行时的类型检查。
    使用slick的过程中,最常用的Table, TableQuery, Column都是Rep的子类。

    2.1 Rep的继承结构

    2.2 Rep的核心方法和功能

    Rep的功能是成为scala语言和slick.ast包下节点的桥梁, 使得可以使用scala的类型系统和方法来生成slick抽象语法树。

    2.2.1 Rep顶层父类

    顶层父类有两个方法, encodeRef(path:Node):Rep[T] 和 toNode:Node。

    1. encodeRef方法
      encodeRef方法从直觉上看,就是将抽象语法树的Node转化为Rep[T]。
      encodeRef方法的作用是将Node附带上类型,路径等上下文信息, 通过这些上下文信息,使得Node可以使用scala类型进行约束,映射,或者可以标记节点的父节点继承父节点的上下文等等。

    2. toNode方法
      toNode方法就是将Rep的类型上下文信息去掉 , 将Rep还原回Node。

    2.2.2 TypedRep 和 UntypedRep

    1. 区别
      TypedRep 和 UntypedRep 唯一的区别是TypedRep在encodeRef的时候会通过隐式参数保存Type信息,使得Rep在运行时也可以拿到Rep附带的类型信息。而UntypedRep的类型信息只能作为编译时的泛型约束。

    2. TypedRep 附带的类型信息
      这里的Type是slick.ast抽象的Type,在scala的classTag的基础上增加描述,对Tuple,Option等做了进一步的支持,可以和数据库的数据类型进行映射,以后会详细说明这一部分。

    3. 作用
      TypedRep 主要是作为表字段column的Rep, 附带了可以和数据库进行映射的类型信息。
      UnTypedRep 目前没什么用。

    2.2.3 MappedProjection

    1. 功能
      MappedProjection的作用是将查询回来的数据映射为scala对象。

    2. 主要成员
      child:Node 相关联的抽象语法树节点
      Mapper:slick.ast.Type 和 scala类型之间相互转化
      classTag: scala类型信息

    2.3.4 ShapedValue, AbstractTable, QueryBase

    这里简单介绍一下相关的功能, 后面会详细分析这3个类。

    1. ShapedValue是将基础类型组合起来以后的包含路径信息的Rep

    2. AbstractTable用来表示数据库表, 包含所有的表字段Rep

    3. QueryBase是查询的Rep,可以进行map, filter等操作将Query映射为另一个Query。其中shaped字段是·将AbstractTable转为ShapedValue后的对象·

    2.3.5 RepOption

    scala的Option类对应的Rep

  • 相关阅读:
    Linux下c开发 之 线程通信(转)
    mount -t nfs 的使用
    window共享linux下的文件 samba
    C/C++ 的使用
    php获取格式时间和时间戳
    php压缩文件夹
    php递归删除文件夹
    php生成文件夹(递归生成)
    QQ音乐API分析记录
    $(this)与this的区别
  • 原文地址:https://www.cnblogs.com/elyw/p/10282476.html
Copyright © 2011-2022 走看看