• 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

  • 相关阅读:
    shell读取文件不改变文本格式
    lua 的 os.date os.time
    gerrit 操作
    docker 的 镜像生成系列
    Windows 跟 Linux 文件共享:Samba 设置
    viscode 使用 格式的配置
    python pip 升级 或者换源
    centos 的系统管理命令 service systemctl
    Linux 的 netstat 命令
    MVC 、MTV 模式
  • 原文地址:https://www.cnblogs.com/elyw/p/10282476.html
Copyright © 2020-2023  润新知