CRUD

术语

  1. get(id):表示通过id获取一个完整的对象
  2. QueryUtil:基于拼接的查询工具,包含一些更具体的工具
    1. PageUtil:分页工具
    2. CriteriaUtil:条件拼接工具,包含一些字段,以供db层解析
      1. 如:connection(and/or)、key、condition(>,<,!=)、value
    3. OrderByUtil:排序工具
    4. Params:自定义的附加参数
  3. query(queryUtil):表示根据查询工具查询返回的对象list

    更新

  4. 在更新中如果需要查询数据,应该使用get(id)方法,或者专用的query方法;应该杜绝使用query(queryUtil)

    1. query(queryUtil)有两个弊端:
      1. 该方法可能经常变动,并且对查询条件又特别的处理,很容易在更新时忽略掉使用它的方法
      2. 该方法在dao层有不可预测的缓存机制(很可能更新了QueryUtil之后,)

        缓存

  5. 在设计之初,如果要使用缓存,get(id)接口应该指定一个缓存版还有一个不缓存版以作区分

    1. 如果是中途添加缓存,则应该将接口复制一份再做缓存版
      1. 原因就是第二条
  6. 在涉及update、insert、delete的业务时,数据源绝对不可以是从缓存中查询的

    延迟队列

  7. 在涉及更新操作时,务必校验那个时刻对象的属性是否还能满足更新的要求

    ThreadLocal

  8. 使用前务必检查状态信息,使用后务必清除

    软删除

    删除,意味着某些数据是不再被需要的 软删除的设计初衷是为了防止数据在误删的时候得以恢复

  9. 从设计角度讲,被标记为删除的行不应该被业务代码重新标记为未删除

    1. 应该用其他的方式来描述”可用“这种状态,比如”有效”、”无效”