Interface DaoInterceptor

All Known Implementing Classes:
DaoInterceptors

public interface DaoInterceptor
拦截器
preXXX 早于before 增删改可以在生成语句之前修改实体/条件等,查询时可做记录或者是抛异常阻止执行
beforeXXX 在...之前, 已经生成语句, 再修改实体/q/条件等不会作用于语句, 但是可以直接修改语句
after 在...之后,已经执行完毕, 一般只用于记录
只作用于dao, 不作用于直接由jdbc执行器执行的dsl/原生sql
Author:
Maning
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final DaoInterceptor
    空实例
  • Method Summary

    Modifier and Type
    Method
    Description
    default void
    afterDelete(Class<?> entityClass, Statement statement, int result)
    删除之后
    default void
    afterGet(Class<?> entityClass, Type resultType, Select select, Object result)
    单条查询执行之后
    default void
    afterInsert(Class<?> entityClass, Object source, Insert insert, int result)
    插入执行之后
    已执行完毕,一般只用来记录
    default void
    afterInsertBatch(Class<?> entityClass, List<?> sources, Insert insert, int result)
    批量插入执行之后
    已执行完毕,一般只用来记录
    如果原entities包含已赋值自增id和未赋值id两组,则会分开两组执行,调用2次
    default void
    afterList(Class<?> entityClass, Type elementType, Select select, List<?> result)
    列表查询执行之后
    default void
    afterPage(Class<?> entityClass, Type elementType, Pageable pageable, Page<?> result)
    分页查询执行之后
    default void
    afterStream(Class<?> entityClass, Type elementType, Select select, Stream<?> result)
    stream查询执行之后
    default void
    afterUpdate(Class<?> entityClass, Object source, Update update, int result)
    更新执行之后
    一般只用来记录
    default Statement
    beforeDelete(Class<?> entityClass, Statement statement)
    删除执行之前
    语句已生成, 可直接修改语句,或者返回新语句(如伪删除时Delete改Update)
    default void
    beforeGet(Class<?> entityClass, Type resultType, Select select)
    单条查询执行之前,可调整语句,作用于业务参数之后
    default void
    beforeInsert(Class<?> entityClass, Object source, Insert insert)
    插入执行之前
    此时已经 生成插入语句, 修改实体对象不会改变插入语句,但可以直接修改插入语句
    default void
    beforeInsertBatch(Class<?> entityClass, List<?> sources, Insert insert)
    批量插入执行之前
    此时已经 生成插入语句, 修改实体对象不会改变插入语句,但可以直接修改插入语句
    如果 原entities包含已赋值自增id和未赋值id两组,则会分开两组执行,调用2次
    default void
    beforeList(Class<?> entityClass, Type elementType, Select select)
    列表查询执行之前,可调整语句,作用于业务参数之后
    default void
    beforeStream(Class<?> entityClass, Type elementType, Select select)
    stream查询执行之前,可调整语句,作用于业务参数之后
    default void
    beforeUpdate(Class<?> entityClass, Object source, Update update)
    更新执行之前
    已生成更新语句, 修改实体类不会作用于语句, 但可直接修改语句
    default Consumer<Delete>
    preDelete(Class<?> entityClass)
    删除前置处理,先于before
    default Consumer<Select>
    preGet(Class<?> entityClass, Type resultType)
    单条查询前置处理
    default void
    preInsert(Class<?> entityClass, Object source)
    插入前置处理,先于before
    可在此处进行一些实体类额外修改操作, 如id注入,审计字段等
    default void
    preInsertBatch(Class<?> entityClass, List<?> entities)
    批量插入前置处理,先于before
    可在此处进行一些实体类额外修改操作, 如id注入,审计字段等
    default Consumer<Select>
    preList(Class<?> entityClass, Type elementType)
    列表查询前置处理
    default void
    prePage(Class<?> entityClass, Type elementType, Pageable pageable)
    分页查询前置处理
    分页查询内部调用count(属于get)和list(属于collection)实现,所以无单独的before,此处仅用于拦截pageable或记录日志
    default Consumer<Select>
    preStream(Class<?> entityClass, Type elementType)
    stream查询前置处理
    default Consumer<Update>
    preUpdate(Class<?> entityClass, Object source)
    更新前置处理, 在before之前
    可在此处进行一些实体类额外修改操作, 如审计字段等
  • Field Details

  • Method Details

    • afterDelete

      default void afterDelete(Class<?> entityClass, Statement statement, int result)
      删除之后
      Parameters:
      entityClass - 实体类
      statement - 语句
      result - 结果,变动条数(>=0)或错误代码
    • afterGet

      default void afterGet(Class<?> entityClass, Type resultType, Select select, Object result)
      单条查询执行之后
      Parameters:
      entityClass - 实体类,仅做记录
      resultType - 结果类型,仅用作记录,如果是optional查询,resultType只是其包裹类型,不带有Optional
      select - 查询语句,仅用作记录
      result - 查询结果
    • afterInsert

      default void afterInsert(Class<?> entityClass, Object source, Insert insert, int result)
      插入执行之后
      已执行完毕,一般只用来记录
      Parameters:
      entityClass - 实体类
      source - 值对象,一般为实体
      insert - 插入语句
      result - 结果,变动条数(>=0)或错误代码
    • afterInsertBatch

      default void afterInsertBatch(Class<?> entityClass, List<?> sources, Insert insert, int result)
      批量插入执行之后
      已执行完毕,一般只用来记录
      如果原entities包含已赋值自增id和未赋值id两组,则会分开两组执行,调用2次
      Parameters:
      entityClass - 实体类
      sources - 值对象,一般为实体
      insert - 插入语句
      result - 结果,变动条数(>=0)或错误代码
    • afterList

      default void afterList(Class<?> entityClass, Type elementType, Select select, List<?> result)
      列表查询执行之后
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      select - 查询语句,仅用作记录
      result - 结果
    • afterPage

      default void afterPage(Class<?> entityClass, Type elementType, Pageable pageable, Page<?> result)
      分页查询执行之后
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      pageable - 分页
      result - 结果
    • afterStream

      default void afterStream(Class<?> entityClass, Type elementType, Select select, Stream<?> result)
      stream查询执行之后
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      select - 查询语句,仅用作记录
      result - 结果
    • afterUpdate

      default void afterUpdate(Class<?> entityClass, Object source, Update update, int result)
      更新执行之后
      一般只用来记录
      Parameters:
      entityClass - 实体类
      source - 要更新的实体,可能为空(如直接setter方式修改某列为null)
      update - 更新语句
      result - 结果,变动条数(>=0)或错误代码
    • beforeDelete

      default Statement beforeDelete(Class<?> entityClass, Statement statement)
      删除执行之前
      语句已生成, 可直接修改语句,或者返回新语句(如伪删除时Delete改Update)
      Parameters:
      entityClass - 实体类
      statement - 语句(可能已被前置拦截器修改为其他语句,如Update)
      Returns:
      语句,可以修改为其他语句,比如伪删除会将Delete改为update
    • beforeGet

      default void beforeGet(Class<?> entityClass, Type resultType, Select select)
      单条查询执行之前,可调整语句,作用于业务参数之后
      Parameters:
      entityClass - 实体类,仅做记录
      resultType - 结果类型,仅做记录, 调整不再作用语句,如果是optional查询,resultType只是其包裹类型,不带有Optional
      select - 查询语句,可自行调整
    • beforeInsert

      default void beforeInsert(Class<?> entityClass, Object source, Insert insert)
      插入执行之前
      此时已经 生成插入语句, 修改实体对象不会改变插入语句,但可以直接修改插入语句
      Parameters:
      entityClass - 实体类
      source - 值对象,一般为实体
      insert - 插入语句
    • beforeInsertBatch

      default void beforeInsertBatch(Class<?> entityClass, List<?> sources, Insert insert)
      批量插入执行之前
      此时已经 生成插入语句, 修改实体对象不会改变插入语句,但可以直接修改插入语句
      如果 原entities包含已赋值自增id和未赋值id两组,则会分开两组执行,调用2次
      Parameters:
      entityClass - 实体类
      sources - 值对象,一般为实体
      insert - 插入语句
    • beforeList

      default void beforeList(Class<?> entityClass, Type elementType, Select select)
      列表查询执行之前,可调整语句,作用于业务参数之后
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      select - 查询语句,可自行调整
    • beforeStream

      default void beforeStream(Class<?> entityClass, Type elementType, Select select)
      stream查询执行之前,可调整语句,作用于业务参数之后
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      select - 查询语句,可自行调整
    • beforeUpdate

      default void beforeUpdate(Class<?> entityClass, Object source, Update update)
      更新执行之前
      已生成更新语句, 修改实体类不会作用于语句, 但可直接修改语句
      Parameters:
      entityClass - 实体类
      source - 要更新的实体,可能为空(如直接setter方式修改某列为null)
      update - 更新语句,可自行调整
    • preDelete

      default Consumer<Delete> preDelete(Class<?> entityClass)
      删除前置处理,先于before
      Parameters:
      entityClass - 实体类
      Returns:
      删除语句自定义, 无需操作可以返回空操作或null,一般仅用于添加前置条件(早于dao其他参数传入的条件)
    • preGet

      default Consumer<Select> preGet(Class<?> entityClass, Type resultType)
      单条查询前置处理
      Parameters:
      entityClass - 实体类,仅做记录
      resultType - 结果类型,仅做记录,如果是optional查询,resultType只是其包裹类型,不带有Optional
      Returns:
      无需自定义查询可返回null, 若需则返回, 会先于业务参数作用于语句
    • preInsert

      default void preInsert(Class<?> entityClass, Object source)
      插入前置处理,先于before
      可在此处进行一些实体类额外修改操作, 如id注入,审计字段等
      Parameters:
      entityClass - 实体类
      source - 值对象,一般为实体
    • preInsertBatch

      default void preInsertBatch(Class<?> entityClass, List<?> entities)
      批量插入前置处理,先于before
      可在此处进行一些实体类额外修改操作, 如id注入,审计字段等
      Parameters:
      entityClass - 实体类
      entities - 值对象,一般为实体
    • preList

      default Consumer<Select> preList(Class<?> entityClass, Type elementType)
      列表查询前置处理
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      Returns:
      无需自定义查询可返回null, 若需则返回, 会先于业务参数作用于语句
    • prePage

      default void prePage(Class<?> entityClass, Type elementType, Pageable pageable)
      分页查询前置处理
      分页查询内部调用count(属于get)和list(属于collection)实现,所以无单独的before,此处仅用于拦截pageable或记录日志
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      pageable - 分页
    • preStream

      default Consumer<Select> preStream(Class<?> entityClass, Type elementType)
      stream查询前置处理
      Parameters:
      entityClass - 实体类,仅做记录
      elementType - 元素类型,仅做记录
      Returns:
      无需自定义查询可返回null, 若需则返回, 会先于业务参数作用于语句
    • preUpdate

      default Consumer<Update> preUpdate(Class<?> entityClass, Object source)
      更新前置处理, 在before之前
      可在此处进行一些实体类额外修改操作, 如审计字段等
      Parameters:
      entityClass - 实体类
      source - 要更新的值对象|实体,可能为空(如直接setter方式)
      Returns:
      更新自定义